是const
复合文字的static
变量初始化有效?
#define COMPOUND ((const int [2]){1, 2})
static const int x = COMPOUND[0];
/* static const int x = 1; should be equivalent */
编辑:
第一评论可能duplicacte没有意义的,因为我要求明确有关const
文字,而不是变量。
是,化合物字面的元件可以用作一个初始值设定。
Ç2018 6.7.9 4告诉我们初始化必须是什么:
所有的表达式中对于具有静态或线程存储时间应是常量表达式或字符串文字的对象的初始化。
6.6告诉我们常量表达式可能。第3段说:
常量表达式不得含有赋值,递增,递减函数调用,或逗号经营者,当它们被包含未评估的子表达式中除。
第4段说:
每个常量表达式应评估为常量,它是在其类型表示的值的范围内。
第7段扩展这:
更宽容度为允许在初始化常量表达式。这样的常量表达式应,或评估于下列中的一种:
- 算术常量表达式
- 空指针常量,
- 一个地址常量,或
- 对于一个完整的对象类型加上或减去一个整数常量表达式一个地址常量。
其他段落中没有禁止使用复合文字的,因此它们是允许的。