2013-04-03 124 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和關鍵字靜態的,則[ 和]可限定表達式或*。如果它們定義了一個表達式 (它指定了一個數組的大小),表達式應該有一個整數類型 。如果該表達式是一個常量表達式,則其應該具有大於零的值。