自动初始化局部变量

时间:2017-01-19 06:52:01

标签: c variables scope initialization

我有以下代码段。

int j;
printf("%d",j);

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

  

32039491

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

int j;
print("%d",j);
while(j);

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

  

0

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

2 个答案:

答案 0 :(得分:8)

不确定值。它可以是任何东西。

引用C11§6.7.9

  

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

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

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

用法将导致undefined behavior

答案 1 :(得分:4)

  

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

那么你的期望是不合理的希望。当您使用未初始化对象的不确定值时,通常会得到(并且仅针对您的代码片段执行获取)未定义的行为。打印垃圾值只是无限多种表现形式之一。

  

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

你认为错了,你也得出了错误的结论。当您单独站立时,两个代码段都表现出未定义的行为。你无法安全地依赖任何特定的结果。