更基本的方法:
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'的初始值设定项[-Wmissing-field-initializers]
通过C99标准它应该初始化为零并摆脱警告?
换到
#define ADD_STRUCT_TO_ARRAY(xu) X(xu, &(struct xu){0})SEP
得到ALMOST摆脱警告但不是如果struct的第一个元素是float或double .
任何想法发生了什么?,设置0.0似乎没有帮助
1 回答
{}
绝对不是C中的有效初始化程序,因此是您看到的第一个警告 . (它对C有效,但此处使用的"compound literal"的构造不是) .现在,一旦你有至少一个初始化程序,这是正确的C.如果你有很多警告标志,一些编译器会给你额外的诊断 . 如果你在这里,这些只是烦人的 .
{ 0 }
是C标准预见的默认初始值设定项 . 如果没有其他简单的方法来平息它,我只是关闭那个特定警告(缺少字段初始化器) .