c - printf 为单位化变量打印什么



代码应该打印什么?0或任何垃圾值,还是取决于编译器?

#include <stdio.h>
int a;
int main() 
{ 
   printf("%dn",a);
   return 0;
}

答案是0。全局变量初始化为零。

我会

说你的代码可能会输出任何东西,或者只是任何事情都可能发生,因为你的代码根据 C99 调用未定义的行为。

您没有范围内printf的原型。

J.2 未定义的行为

— 对于在函数原型定义函数的

范围内调用没有函数原型的函数,原型以省略号结尾,或者升级后的参数类型与参数的类型不兼容 (6.5.2.2)。

如果问题是关于全局变量的初始化,那么a将被初始化为 0,因为它具有静态存储持续时间。

我在 C99 标准第 6.7.8.10 节,初始化中找到:

如果未显式初始化具有自动存储持续时间的对象,则其值为 定。如果未显式初始化具有静态存储持续时间的对象, 然后: — 如果它具有指针类型,则将其初始化为空指针; — 如果它具有算术类型,则将其初始化为(正数或无符号)零; — 如果它是一个聚合,则根据这些规则(递归地)初始化每个成员; — 如果它是一个联合,则根据这些初始化(递归)第一个命名成员 规则。

第6.2.4.3节定义:

使用

外部或内部链接声明其标识符的对象,或者使用 存储类说明符 static 具有静态存储持续时间。它的生命周期是整个 程序的执行及其存储的值仅在程序之前初始化一次 启动。

换句话说,全局变量初始化为 0。自动变量(即非static局部变量)不会自动初始化。

没有自动变量[通常我们在大多数情况下在函数中使用的变量]所有其他变量的值都分配给 0

全局变量初始化为 0。自动变量(即非静态局部变量)不会自动初始化。

相关内容

  • 没有找到相关文章

最新更新