C中struct成员的默认值是什么?

时间:2016-06-16 11:22:12

标签: c

  

假设所有都是本地自动变量

假设我有以下程序:

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);

本地堆栈成员是否已初始化为某些默认值?我希望它们是垃圾值。如果是这样,为什么编译器在使用未初始化时不会抛出结构成员的警告?

2 个答案:

答案 0 :(得分:5)

不需要编译器为您提供诊断。好的编译器呢。常规变量和结构之间没有任何区别,如果它们在本地范围(自动存储持续时间),它们将包含垃圾值。使用这些值可以调用未定义的行为。

唯一使结构不同的是,如果初始化至少一个成员,其余成员将被设置为零(初始化就好像它们具有静态存储持续时间)。但是,当没有成员被初始化时,情况并非如此。

答案 1 :(得分:3)

不,它们未初始化为任何默认值。您可以说编译器以及标准缺乏检测此类问题的能力,并且不会发出任何警告。可能是编译器编写者很容易检查普通(基本)数据类型而不是UDT。

代码分析工具可能会针对此类情况发出警告。以CppCheck为例。