2013-04-03 121 views
3

例如,是C标准是不断要求的吗?

static int a[1+1]; 

有效标准C?对于某些或所有标准版本?

我不感兴趣的编译器是否可以处理它,但无论是标准C.

+0

标题似乎并不符合问题,常量折叠是一种优化技术,绝对不是标准所要求的,但是允许的。 “1 + 1”是一个常量表达式,它的属性在标准中定义。看起来你的问题是关于常量表达式。 –

回答

6

C11,6.6节的一部分:

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

所以是简单常量折叠是强制性的,此代码段是有效的标准C.

+0

谢谢!这是在旧版本的标准中的情况吗? –

+0

@MikeGraham:我没有旧版本的标准版,但它似乎甚至[MSVC](http://msdn.microsoft.com/en-us/library/tby3xex3(v = vs.80))。 aspx)使用这个定义,这表明它存在于C89中。 –

+1

@MikeGraham C89标准似乎有所有相关部件出现,所以是的。 – Khoth

2

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

组声明,6.7.5.2(C99):

除了可选的类型合格音响ERS和关键字静态的,则[ 和]可限定表达式或*。如果它们定义了一个表达式 (它指定了一个数组的大小),表达式应该有一个整数类型 。如果该表达式是一个常量表达式,则其应该具有大于零的值。