[英]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.