【发布时间】:2020-12-04 01:41:05
【问题描述】:
考虑以下 C 代码:
typedef struct abc {
int a[4];
int b;
int c;
} abc_t;
abc_t x = { 0 };
我发现将其与gcc -c -Wall -Wextra -pedantic -std=c99 组合不会产生任何警告或错误消息。我的解释是0 将表示成员a 的初始化程序。但是a 是一个数组,而不是一个标量。如果我用1 替换0,这会立即产生预期的警告消息:
warning: missing braces around initializer [-Wmissing-braces]
14 | abc_t x = { 1 };
| ^
| { }
C 标准中是否有一些例外,{ 0 } 总是被解释为将所有内容设置为零的初始化程序? Common sources 的文档似乎没有讨论类型的明显不匹配(数组与标量)。
我知道初始化器不能为空,即{ } 不是有效的初始化器。
【问题讨论】:
标签: c struct initializer