c - 当其中一个字段是数组时,如何初始化结构的所有字段?

标签 c data-structures gcc-warning

#include <stdio.h>

typedef struct
{
    int as;
    int bs;
    int cs;
}asd_t;

typedef struct
{
    asd_t asd[10];
}asd_field_t;    

typedef struct
{
    int a;
    int b;
    asd_field_t  asd_field[10];
}abc_t;    

int main()
{
    abc_t abc ={0,1,{0}};
    return 0;
}

在上面的代码中,我试图初始化结构abc_t。将上面的代码编译为:

gcc -Wall sample.c

给我:

sample.c: In function 'main':
sample.c:26: warning: missing braces around initializer
sample.c:26: warning: (near initialization for 'abc.asd_field[0].asd')

如何避免此警告?

最佳答案

结构 abc_t 在 asd_field_t 类型内部有另一个结构,您使用 {0} 将其初始化为 0。您从 GCC 收到的警告是因为您将该结构 (asd_field) 的所有成员清零,而不是一一填充它们。有一种说法认为 GCC 的这种行为是不正确的,因为标准认为使用 {0} 将整个结构归零是完全有效的。您可以阅读 GCC 的错误报告 here

您还可以通过传递选项 -Wno-missing-braces 来禁用烦人的警告,以便您获得所有其他墙警告,即: gcc -Wall -Wno-missing-braces test.c -o test

关于c - 当其中一个字段是数组时,如何初始化结构的所有字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15633241/

相关文章:

c - C 中的 putw() 函数

c - 在函数之间传递指针

java - 提高推送到自定义单链表的性能

c++ - 菜单驱动的堆栈程序作为带有字符信息的链接列表

ios - 从元组的 Swift 数组中投影一列

c - GCC 发出不兼容指针类型的警告

指针到函数指针之间的转换错误

c - 循环不会运行多次

c - 如果比较两个指针的地址而不是内容,gcc/g++ 警告?

c - 我不明白为什么以下代码会给我“段错误(核心已转储)”