【发布时间】:2016-06-16 11:22:11
【问题描述】:
假设都是局部自动变量
假设我有以下程序:
int x;
printf("%d",x);
编译器给了我警告:x is used uninitialized in this function。但是为什么我对结构成员不一样:
struct Person
{
int age;
char name[10];
} man;
printf("Name : %s Age : %d\n", man.name, man.age);
本地堆栈成员是否已初始化为某些默认值?我希望它们是垃圾值。如果是这样,为什么编译器在未初始化使用时不会为结构成员抛出警告?
【问题讨论】:
-
仅仅因为您没有收到警告,这并不意味着您的代码不会不调用未定义的行为。如果标准中有这样的要求,请说明对段落的引用。
-
它们实际上包含垃圾值,这取决于您如何处理它们,因为有时这些“垃圾”设置在其他地方,因此它们实际上并不是“垃圾”
-
@Gar:不,它们仍然是“垃圾”。就称为 C 的抽象而言,它们具有未指定的值。仅仅因为您认为您将数据写入内存中的同一位置,并不意味着您将从该代码中获得可预测且定义明确的行为。
-
@Gar:标准中没有使用“垃圾”一词是有充分理由的。它们有一个 indeterminate 值。
标签: c