我們有一個學校項目,任何使用C的信息系統。爲了保持動態大小的學生記錄列表,我去了一個鏈表數據結構。今天早上,我的朋友讓我看看他的系統。我很驚訝,他的記錄列表:C全局未定義數組?
#include <stdio.h>
/* and the rest of the includes */
/* global unsized array */
int array[];
int main()
{
int n;
for (n=0; n < 5; n ++) {
array[n] = n;
}
for (n=0; n < 5; n ++) {
printf("array[%d] = %d\n", n, array[n]);
}
return 0;
}
與代碼,他宣稱的未分級的數組,它是全球性(在BSS段),整個程序。他能夠通過重寫的存儲器後續塊與零以外的值,以新的條目添加到所述陣列,使得他可以遍歷正是如此陣列:
for (n=0; array[n]; n++) {
/* do something */
}
他用
(I也與測試它)的Turbo C V1 。我在linux中試過,它也可以。
因爲我從來沒有遇到過這種技術,我假設它有一個問題。所以,是的,我想知道爲什麼這是一個壞主意,爲什麼更喜歡這個鏈接列表。
這與寫入任何越界數組相同 - 未定義。 – teppic 2013-03-09 14:56:14
這應該是c99嗎? – 2013-03-09 15:03:18
1der請檢查teppic的更新答案。並打開鍵盤鏈接,您可以觀察代碼中C的未定義行爲。 – 2013-03-09 15:22:28