Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C {}和{0}作为结构初始化器有什么区别?_C_Struct_Initialization - Fatal编程技术网

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的所有捕获初始化器,而 {} /COD>是语法错误。近年来,GCC开始出现分歧,当
{0}
与某个内部聚合匹配时,GCC会对
{0}
发出令人讨厌的诊断,您必须使用
{0}
或类似方法关闭该聚合。@Kaz,是的,这真的很烦人。对于gcc,“缺少大括号”是我系统关闭的警告之一,正是出于这个原因。
-Wno缺少大括号-Wno缺少字段初始值设定项
是我的gcc构建脚本中的标准选项。