静态初始化struct为零

时间:2014-09-28 18:50:22

标签: c struct static initialization

更基本的方法:

struct TEST
{
    float c;
    unsigned int c1;
    double c2[5];
} t = {0};

发出警告:

  

警告:缺少'struct TEST'字段'c1'的初始值设定项[-Wmissing-field-initializers]

将C设置为int,long,char(但不是数组)等...

使用数组它会发出警告:

  

警告:初始化程序[-Wmissing-braces]

周围缺少大括号

是: 我有以下这样的一行:

#define ADD_STRUCT_TO_ARRAY(xu) X(xu, &(struct xu){})SEP

这是必需的,因为结构必须在许多地方初始化。但它给了我警告:

  

警告:缺少'struct A'字段'a1'的初始化程序[-Wateing-field-initializers]

按照C99标准,它应该初始化为零并消除警告?

更改为

#define ADD_STRUCT_TO_ARRAY(xu) X(xu, &(struct xu){0})SEP

获取ALMOST摆脱警告,但不是如果结构的第一个元素是float或double。

任何想法发生了什么?,设置0.0似乎没有帮助

1 个答案:

答案 0 :(得分:0)

{}绝对不是C中的有效初始化程序,因此是您看到的第一个警告。 (它对C ++有效,但是这里使用的"复合文字"的结构不是。

现在,一旦你有至少一个初始化程序,这是正确的C.如果你有很多警告标志,一些编译器会给你额外的诊断。如果你在这里,这些只是烦人的。 { 0 } 默认初始值设定项,正如C标准所预见的那样。如果没有其他简单的方法可以让它平静下来,我只是关闭那个特定警告(缺少字段初始化程序)。