2013-05-16 51 views
5

當我運行下面的代碼,它工作得很好C:爲什麼我被允許在C中使用const限定變量作爲數組大小?

#include<stdio.h> 

int main(void) 
{ 

const int x=5; 
char arr[x]; 
printf("%d",sizeof(arr)); 

} 

但是,並非只有我讀之前const合格的變量不是real常數(這就是爲什麼他們不能在case條件下使用switch-case),但是從IBM以下鏈接證實是(IBMLINK)說:

const int k = 10; 
int ary[k];  /* allowed in C++, not legal in C */ 

那麼,爲什麼我是允許使用在C一const限定變量數組大小沒有任何錯誤?

+2

您的IBM鏈接已過時C標準。使用過去14年更新過的C參考。 – Lundin

+0

我將標題和文本從「索引」更改爲「大小」。術語索引僅在您使用數組來指示某個特定成員時使用。在聲明或定義中,聲明整個對象的大小。 –

回答

10

c99支持變長數組,但c90不支持變長數組,你可以看到這個更清楚,如果你正在使用gcc,並嘗試用這些參數來編譯:

gcc -std=c89 -pedantic 

這會給你以下警告:

warning: ISO C90 forbids variable length array ‘y’ [-Wvla] 

,但如果你編譯使用c99它是完美的罰款:

gcc -std=c99 -pedantic 

正如John Bode所指出的,2011 C標準可變長度陣列(VLA)現在是可選的。韋恩康拉德指出,這是關於VLA的Dr Dobbs文章,也是關於gcc docs的鏈接。

+0

這是否意味着'c99'下的數組索引可以返回一個函數呢? – Jugni

+0

@Jugni這應該沒問題 –

+0

我應該得出結論:在'c99'下,沒有規則說明編譯器必須知道每個數組的長度,這是在IBM門戶編寫的,它必須被編譯器知道。那麼你能否確認上次在'c99'之後沒有這樣的需求?函數的返回,甚至是一般的**變量**(有或沒有'const'限定符)都可以是數組索引? – Jugni

相關問題