通常使用{0}
初始化struct
或array
,但要考虑第一个字段不是标量类型的情况。如果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
根据该定义,一个初始化器列表必须包含至少一个初始化器。