更基本的方法:
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似乎没有帮助
答案 0 :(得分:0)
{}
绝对不是C中的有效初始化程序,因此是您看到的第一个警告。 (它对C ++有效,但是这里使用的"复合文字"的结构不是。
现在,一旦你有至少一个初始化程序,这是正确的C.如果你有很多警告标志,一些编译器会给你额外的诊断。如果你在这里,这些只是烦人的。 { 0 }
是 默认初始值设定项,正如C标准所预见的那样。如果没有其他简单的方法可以让它平静下来,我只是关闭那个特定警告(缺少字段初始化程序)。