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。在这种简单的情况下,该程序可以提供正确的结果,但是我认为您不应该依赖于此,而需要正确地初始化它们。