请考虑以下代码片段
int main(){
int a, b, c;
printf("%d %d %d", a, b, c);
return 0;
}
这将显示一些垃圾值。
现在,考虑这个片段。
int main(){
int a, b, c = 0;
printf("%d %d %d", a, b, c);
return 0;
}
每次执行都显示0 0 0
,但我只将变量c
初始化为0
,这是不是int a=0, b=0, c=0;
的简写
不知道如何在官方文件中寻找这种怀疑。
2条答案
按热度按时间pvcm50d11#
如果没有初始化,
a, b
在int a, b, c = 0;
之后 * 不确定 *它们的值既不一定一致(可能是random),也不安全。
如果为对象指定了初始化,...;否则,每次到达声明时,该值变为不确定。C17 dr §6.2.4 6
不确定值
未指定的值
相关类型的有效值,本国际标准对在任何情况下选择的值没有强制要求3.19.3
陷印表示
不需要表示对象类型3.19.4的值的对象表示
不知道如何在官方文件中寻找这种怀疑。
请参见Where do I find the current C or C++ standard documents?并在规范中搜索 * 初始化 *。
u3r8eeie2#
好吧,
a
和b
在两个例子中都得到了垃圾,唯一的区别是它们的垃圾在每次执行时是不同的,比如,它们被放在一个可以包含任何内容的地址上,比如,-2130381或83943097,甚至是0。X%的情况下,你可以在一个未初始化的值上得到一个0,而且它会对代码的前Y个修改起作用。在那之后,你的代码可能就会中断,你可能会花一些时间调试它。