我有以下代码段。
int j;
printf("%d",j);
正如预期的那样,我得到了垃圾值。
32039491
但是当我在上面的代码片段中包含一个循环时,比如
int j;
print("%d",j);
while(j);
我在该程序的多次试验中获得以下输出。
0
我一直认为局部变量默认初始化为垃圾值,但看起来变量在使用循环时会自动初始化。
答案 0 :(得分:8)
不确定值。它可以是任何东西。
引用C11
§6.7.9
如果没有显式初始化具有自动存储持续时间的对象,则其值为 不定。 [...]
除非显式初始化,否则自动局部变量将包含不确定的值。如果您尝试使用变量,而它保持不确定的值和
用法将导致undefined behavior。
答案 1 :(得分:4)
正如预期的那样,我得到了垃圾值。
那么你的期望是不合理的希望。当您使用未初始化对象的不确定值时,通常会得到(并且仅针对您的代码片段执行获取)未定义的行为。打印垃圾值只是无限多种表现形式之一。
我一直认为局部变量默认初始化为垃圾值,但看起来变量在使用循环时会自动初始化。
你认为错了,你也得出了错误的结论。当您单独站立时,两个代码段都表现出未定义的行为。你无法安全地依赖任何特定的结果。