Assume all are local automatic variables
假设我有以下程序:
int x;
printf("%d",x);
编译器警告我:x 在此函数中使用未初始化
。但是为什么我不为结构成员得到相同的:
struct Person
{
int age;
char name[10];
} man;
printf("Name : %s Age : %d\n", man.name, man.age);
本地堆栈成员是否已初始化为某些默认值?我希望它们是垃圾值。如果是这样,为什么编译器在使用未初始化的结构成员时不对结构成员发出警告?
最佳答案
编译器不需要为此提供诊断。好的编译器会这样做。常规变量和结构之间没有什么不同,如果它们在局部范围内(自动存储持续时间),它们将包含垃圾值。使用这些值可能会引发未定义的行为。
唯一使结构不同的是,如果您至少初始化一个成员,则其余成员将设置为零(初始化时就好像它们具有静态存储持续时间一样)。但是当没有一个成员被初始化时情况就不是这样了。
关于c - C 中结构成员的默认值是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37857713/