簡體   English   中英

聲明一個負長度數組

[英]Declaring an array of negative length

在創建負長度數組時,C中會發生什么?

例如:

int n = -35;

int testArray[n];

for(int i = 0; i < 10; i++)
    testArray[i]=i+1;

此代碼將編譯(並且在啟用-Wall時不會顯示任何警告),並且您似乎可以毫無問題地分配給testArray[0] 分配過去會給出段錯誤或非法指令錯誤,並從數組中讀取任何內容,說“中止陷阱”(我不熟悉那個)。 我意識到這有些學術性,並且(希望)永遠不會出現在現實生活中,但C標准是否有任何特定的方式來處理這樣的數組,或者它是否因編譯器而異?

它是未定義的行為,因為它打破了“應該”約束:

C99§6.7.5.2:

如果size是一個不是整數常量表達式的表達式......每次計算它時,它的值應大於零。

我相信,未定義的行為雖然不引用我。

這給出了錯誤error: size of array 'testArray' is negative在gcc中error: size of array 'testArray' is negative

int testArray[-35];

但是,正如你所見:

int n = -35;
int testArray[n];

即使同時使用-Wall和-W也不會出錯。

但是,如果使用-pedantic標志,gcc將警告ISO C90禁止可變長度數組。

用於編譯的 Visual Studio erro消息,可以使用-1來表示一個空數組。 它期望int並且你傳遞int,所以沒有編譯器錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM