通常使用{0}初始化structarray,但要考虑第一个字段不是标量类型的情况。如果struct Person的第一个字段是另一个struct或数组,则此行将导致错误(error: missing braces around initializer)。

struct Person person = {0};

至少GCC允许我使用一个空的初始化列表来完成同一件事
struct Person person = {};

但这是有效的C代码吗?

另外:该行是否保证提供相同的行为,即零初始化的struct
struct Person person;

最佳答案

否,不允许使用空的初始化程序列表。当使用-std=c99 -pedantic进行编译时,GCC也可以显示此信息:

a.c:4: warning: ISO C forbids empty initializer braces

原因是2011 ISO C Standard的第6.7.9节中定义语法的方式:
initializer:
         assignment-expression
         { initializer-list }
         { initializer-list , }
initializer-list:
         designation(opt) initializer
         initializer-list , designation(opt) initializer

根据该定义,一个初始化器列表必须包含至少一个初始化器。

09-10 19:26