3

例如,是

static int a[1+1];

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

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

4

2 回答 2

6

C11,§6.6:

常量表达式可以在翻译期间而不是运行时进行评估,因此可以在常量可能存在的任何地方使用。

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

于 2013-04-03T13:53:52.463 回答
2

该标准明确定义了这一点。

数组声明器,6.7.5.2 (C99):

除了可选的类型限定符和关键字 static,[ 和 ] 可以分隔表达式或 *。如果它们分隔了一个表达式(它指定了一个数组的大小),那么该表达式应该是一个整数类型。如果表达式是常量表达式,它的值应大于零。

于 2013-04-03T13:58:08.190 回答