c - C 中结构成员的默认值是什么?

标签 c

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/

相关文章:

c - 通过对实际节点进行排序而不仅仅是通过交换节点值来对链表进行排序

c - 在 C 中读写文件

c - 如何将多个 *argv 组合成一个 char* 类型的消息

与 __builtin_bswap32 相关的编译错误

c - strtold 解析的数字小于给定数字

c - 错误 : 0:2: 'attribute' : cannot initialize this type of qualifier (whatever GLSL version used from 1. 1 到 1.5)

c++ - 如何使用 libwebsockets C 库发送 JSON 数据?

c - 你好这个程序用于计算数组中的最小值和最大值

c - linux mkdir函数无法授予完全权限

c - 在 OpenCV 中混合图层