C标准是否需要编译时常量表达式评估?

时间:2013-04-03 13:44:31

标签: c standards constantfolding

例如,是

static int a[1+1];

有效标准C?对于标准的部分或全部版本?

我对编译器是否可以处理它感兴趣,但它是否是标准C的一部分。

2 个答案:

答案 0 :(得分:6)

C11,§6.6:

  

常量表达式可以在转换期间而不是运行时进行评估,因此可以在常量可能的任何位置使用。

所以是的,简单的常量折叠是强制性的,这个片段是有效的标准C。

答案 1 :(得分:2)

标准明确定义了这一点。

数组声明符,6.7.5.2(C99):

  

除了可选的类型限定符和关键字static之外,[   和]可以划定表达式或*。如果他们划定表达式   (指定数组的大小),表达式应具有   整数类型。如果表达式是常量表达式,它应该是   值大于零。