首页 文章

静态将struct初始化为零

提问于
浏览
0

更基本的方法:

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 回答

  • 0

    {} 绝对不是C中的有效初始化程序,因此是您看到的第一个警告 . (它对C有效,但此处使用的"compound literal"的构造不是) .

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

相关问题