2013-03-09 56 views
1

不完全數組類型在著名Struct hack使用,並且因爲C99標準他們被允許。在c99標準之前,這些都是不允許的。我在看標準,我無法得出結論:是不完整的數組類型保證能夠存儲一個元素?

是否允許在結構之外使用不完整的數組類型?(我在標準C99中找到的所有參考文獻:6.7.2.1.15都將它作爲最後一個元素結構)。

那麼下面的程序是否允許按照標準進行編譯?我的問題

int array[]; 
int main(){return 0;} 

第二部分是,如果這是允許的array保證能夠存儲ATLEAST一個元素的他們輸入int

回答

3

是允許按照標準進行編譯的以下程序嗎?

是的,作爲每:

(C99,6.9.2p5)「實施例2如果在含有 INT翻譯單元結束時,我[]; 陣列我仍然具有不完整的類型,隱式初始化程序 將導致它有一個元素,在程序 啓動時將其設置爲零。「

所以

int array[]; 
int main(){return 0;} 

是有效的,等同於:

int array[1]; 
int main(){return 0;} 

請注意,只有當array有(如上)外部鏈接確定爲:

(C99,6.9.2p3)「如果對象的標識符聲明是暫定的定義和內部聯繫,聲明的類型不應爲不完整類型。「

+0

啊..我注意到,只是當你發佈答案。 – 2013-03-09 15:31:01

相關問題