是一个空的初始化程序列表有效的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一个初始化程序。