【发布时间】:2014-08-21 15:30:50
【问题描述】:
在“C 编程语言”第三版和第 32 页中,我看到了让我感到困惑的那些行:
因为自动变量随着函数调用来来去去,它们 不要从一个调用到下一个调用保留它们的值,并且必须 在每个条目上明确设置。如果它们没有设置,它们将包含 垃圾
是说对于下面的代码,a在程序执行完成后不会包含垃圾,如果我这样声明a:int a;那么a会包含垃圾?
#include <stdio.h>
int main () {
int a = 5;
// int a;
printf("\n\t %d", a);
}
【问题讨论】:
-
它不包含垃圾。包含的内容是未定义的。在 Windows 上它可能是 0,但根据 C 语言它可能是飞猴洗碗机。
-
问题在于它经常会包含
0,但并非总是如此。未能初始化其自动变量的程序员会发现它在大多数情况下都能正常工作......这比让它持续失败要糟糕得多。 -
基本上 i 包含上次执行程序留下的垃圾。
-
@Igor 我没喝醉,但我仍然知道 OP 指的是他代码中的注释部分。
-
@HuStmpHrrr 它不会包含任何现代(多用户,受保护的内存)操作系统上“最后执行的程序留下的”数据。那将是一个巨大的安全漏洞。