C语言 变量声明和初始化期间的语法相关查询

7cwmlq89  于 2023-01-01  发布在  其他
关注(0)|答案(2)|浏览(120)

请考虑以下代码片段

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;的简写
不知道如何在官方文件中寻找这种怀疑。

pvcm50d1

pvcm50d11#

如果没有初始化,a, bint a, b, c = 0;之后 * 不确定 *
它们的值既不一定一致(可能是random),也不安全。
如果为对象指定了初始化,...;否则,每次到达声明时,该值变为不确定。C17 dr §6.2.4 6

不确定值

    • 未指定的值陷阱表示**3.19.2

未指定的值

相关类型的有效值,本国际标准对在任何情况下选择的值没有强制要求3.19.3

陷印表示

不需要表示对象类型3.19.4的值的对象表示
不知道如何在官方文件中寻找这种怀疑。
请参见Where do I find the current C or C++ standard documents?并在规范中搜索 * 初始化 *。

u3r8eeie

u3r8eeie2#

好吧,ab在两个例子中都得到了垃圾,唯一的区别是它们的垃圾在每次执行时是不同的,比如,它们被放在一个可以包含任何内容的地址上,比如,-2130381或83943097,甚至是0。X%的情况下,你可以在一个未初始化的值上得到一个0,而且它会对代码的前Y个修改起作用。在那之后,你的代码可能就会中断,你可能会花一些时间调试它。

相关问题