以下代码:
struct Int {
int i;
};
const struct Int i = {sizeof(int) ? (int){1} : 0};
结果是:
初始值设定项元素不是常量
即使这些语句是在文件范围内的,因此复合文字也应该被视为常量.
但是,如果:
- 我用Clang代替;或者
- 我将
sizeof(int)
替换为0;或 - 我把
(int){1}
换成1;或者 - 该表达式用于直接初始化
int
,而不是如下所示的int
struct 成员:int i = sizeof(int) ? (int){1} : 0;
代码将编译得很好.
这引发了几个问题:
- 标准C是否允许使用
sizeof()
条语句与三元组一起使用,以在编译时将一个全局 struct 变量成员初始化为两个值中的一个,其中至少一个是复合文字? - 如果以上所有3个要求都满足,但如果只满足2或1,代码编译正常,为什么GCC会引发错误?