是一个空的初始化程序列表有效的C代码?
通常使用{0}
来初始化一个struct
或一个array
但考虑到第一个字段不是标量types的情况。 如果struct Person
的第一个字段是另一个struct
或数组,那么这行会导致一个错误( error: missing braces around initializer
)。
struct Person person = {0};
至lessGCC允许我使用一个空的初始化列表来完成同样的事情
struct Person person = {};
但是这个有效的C代码?
另外:这条线保证给出相同的行为,即零初始化struct
?
struct Person person;
不,空的初始化程序列表是不允许的。 当用-std=c99 -pedantic
进行编译时,GCC也可以显示:
ac:4: warning: ISO C forbids empty initializer braces
原因在于在2011 ISO C标准的第6.7.9节中定义了语法的方式:
initializer: assignment-expression { initializer-list } { initializer-list , } initializer-list: designation(opt) initializer initializer-list , designation(opt) initializer
根据该定义,初始化列表必须包含至less一个初始化程序。