C {}和{0}作为结构初始化器有什么区别?
这两者之间有什么区别吗:C {}和{0}作为结构初始化器有什么区别?,c,struct,initialization,C,Struct,Initialization,这两者之间有什么区别吗: struct something s = {}; 这个呢 struct something s = {0}; 据我所知,两者都将每个成员初始化为零不是有效的C(除非他们在C11中添加了它),但是它是有效的C++。GCC似乎允许它在C程序中作为一个扩展(虽然我在上的文档中没有看到它,但我可能只是缺少它) 在C++中,它会导致“值初始化”,这意味着每个成员都需要默认构造函数(对于非类成员的初始化为零)。 FYI,这还没有添加到C11, { 0 } /COD>仍然是C的所
struct something s = {};
这个呢
struct something s = {0};
据我所知,两者都将每个成员初始化为零代码>不是有效的C(除非他们在C11中添加了它),但是它是有效的C++。GCC似乎允许它在C程序中作为一个扩展(虽然我在上的文档中没有看到它,但我可能只是缺少它)
在C++中,它会导致“值初始化”,这意味着每个成员都需要默认构造函数(对于非类成员的初始化为零)。 FYI,这还没有添加到C11,<代码> { 0 } /COD>仍然是C的所有捕获初始化器,而
{0}
与某个内部聚合匹配时,GCC会对{0}
发出令人讨厌的诊断,您必须使用{0}
或类似方法关闭该聚合。@Kaz,是的,这真的很烦人。对于gcc,“缺少大括号”是我系统关闭的警告之一,正是出于这个原因。-Wno缺少大括号-Wno缺少字段初始值设定项
是我的gcc构建脚本中的标准选项。