printf 为统一变量打印什么?
代码应该打印什么? 0 或任何垃圾值还是取决于编译器?
#include <stdio.h>
int a;
int main()
{
printf("%d\n",a);
return 0;
}
What should the code print? 0 or any garbage value or will it depend on the compiler?
#include <stdio.h>
int a;
int main()
{
printf("%d\n",a);
return 0;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
答案是 0。全局变量被初始化为零。
the answer is 0. Global variables are initialized to zero.
我想说你的代码可能会输出任何内容,或者只是任何事情都可能发生,因为你的代码根据 C99 调用未定义的行为。
您在范围内没有
printf
的原型。如果问题是关于全局变量的初始化,那么
a
将被初始化为0
,因为它具有静态存储持续时间。I would say your code might output anything or simply anything can happen because your code invokes Undefined Behaviour as per C99.
You don't have a prototype for
printf
in scope.If the question is about initialization of global variables then
a
would be initialized to0
because it has static storage duration.我在 C99 标准,第 6.7.8.10 节,初始化中找到:
第 6.2.4.3 节定义:
换句话说,全局变量被初始化为 0。自动变量(即非静态局部变量)不会自动初始化。
I found on C99 standard, Section 6.7.8.10, Initialization:
Section 6.2.4.3 defines:
In other words, globals are initialized as 0. Automatic variables (i.e. non-
static
locals) are not automatically initialized.没有自动变量[通常我们在大多数情况下在函数中使用]所有其他变量的值都被分配为0
without automatic variable [generally what we use in function in most cases] all other variable's value is assigned to 0
全局变量初始化为0。自动变量(即非静态局部变量)不会自动初始化。
Global variables are initialized as 0. Automatic variables (i.e. non-static locals) are not automatically initialized.