【发布时间】:2014-11-04 12:56:31
【问题描述】:
一开始我尝试初始化一个这样的结构:
struct {
char age[2]; // Hold two 1-Byte ages
} studage[] = {
{23, 56},
{44, 26}
};
但这给了我一个关于缺少大括号的编译器警告,所以我按照编译器的建议使用了更多的大括号,结果如下:
struct {
char age[2]; // Hold two 1-Byte ages
} studage[] = {
{{23, 56}},
{{44, 26}}
};
没有警告。为什么我需要额外的大括号?
【问题讨论】:
-
外面的不是结构体,里面的不是char数组吗?
-
这是一个警告,而不是错误。编译器没有“要求”任何东西。
-
目前不相关,并且可能仅当您正在处理旧事物的时代时,但在 C 中,
char可能是signed或unsigned,具体取决于您的平台。使用unsigned char更安全(除非您正在处理根据某些物理模型可能具有负年龄的负能量反粒子。) -
§6.7.9/30 说“请注意,初始化的完全括号和最小括号形式通常不太可能引起混淆。”