自动初始化局部变量

Moh*_*asi 2 c variables scope initialization

我有以下代码片段.

int j;
printf("%d",j);
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,我得到了垃圾值.

32039491

但是当我在上面的代码片段中包含一个循环时,就像

int j;
print("%d",j);
while(j);
Run Code Online (Sandbox Code Playgroud)

我在该程序的多次试验中得到以下输出.

0

我一直认为局部变量默认初始化为垃圾值,但看起来变量在使用循环时会自动初始化.

Sou*_*osh 8

它具有不确定的价值.它可以是任何东西.

引用C11§6.7.9

如果未显式初始化具有自动存储持续时间的对象,则其值不确定.[...]

除非显式初始化,否则自动局部变量将包含不确定的值.如果您尝试使用变量,同时它保持不确定的值

  • 没有地址
  • 可以有陷阱表示

用法将导致 未定义的行为.