struct SampleStruct {
   int a;
   int b;
   float c;
   double d;
   short e;
};

对于这样的数组,我曾经按如下方式对其进行初始化:
struct SampleStruct sStruct = {0};

我想知道何时声明此结构的数组,我认为这是正确的
struct SampleStruct sStructs[3] = {{0},{0},{0}};

但是,下面也被编译器接受了
struct SampleStruct sStructs[3] = {0};

我想知道最好和安全的方式以及这样做的详细原因。

最佳答案

$ gcc --version
gcc (GCC) 4.6.1 20110819 (prerelease)

如果使用-Wall选项,我的gcc会向我发出有关第三个警告的警告:
try.c:11:9: warning: missing braces around initializer [-Wmissing-braces]
try.c:11:9: warning: (near initialization for ‘sStruct3[0]’) [-Wmissing-braces]

指示您应该编写= {{0}}进行初始化,该操作将第一个结构的第一个字段设置为0,其余所有字段隐式设置为0。在这种简单的情况下,该程序可以提供正确的结果,但是我认为您不应该依赖于此,而需要正确地初始化它们。

10-04 22:01