例如,是
static int a[1+1];
有效标准C?对于标准的部分或全部版本?
我对编译器是否可以处理它感兴趣,但它是否是标准C的一部分。
答案 0 :(得分:6)
C11,§6.6:
常量表达式可以在转换期间而不是运行时进行评估,因此可以在常量可能的任何位置使用。
所以是的,简单的常量折叠是强制性的,这个片段是有效的标准C。
答案 1 :(得分:2)
标准明确定义了这一点。
数组声明符,6.7.5.2(C99):
除了可选的类型限定符和关键字static之外,[ 和]可以划定表达式或*。如果他们划定表达式 (指定数组的大小),表达式应具有 整数类型。如果表达式是常量表达式,它应该是 值大于零。