繁体   English   中英

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

[英]What are the default values of struct members in 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);

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM