2013-08-21 105 views
0

是否有任何情況下翻譯單元中的完整類型可能變爲不完整類型? C11 standard(第6.2.5節)腳註中的以下聲明提示了此問題。完整類型爲C:C11標準中的不完整類型

A type may be incomplete or complete throughout an entire translation unit, or it may change states at different points within a translation unit.

在翻譯單元中,不完整的類型變​​成完整類型的例子比比皆是。但我想知道如果相反的情況是可能的。我的直覺告訴我它不是。

+0

不合時宜#undefine僞? – Jiminion

+1

@Jim #undefine在預處理過程中發生。那時,一種類型的概念不存在。 – fuz

+0

然後我不明白它會如何發生。 (但我可能是錯的......) – Jiminion

回答

1

的複雜情況的例子是以下

extern double A[]; 

double* f(void) { 
    extern double A[5]; 
    enum { a = sizeof(A), }; //< A has complete type 
    return A; 
} 

enum { b = sizeof(A), }; //< A has incomplete type: error 

double A[5]; 

enum { c = sizeof(A), }; //< A has complete type 
+0

範圍的很好的應用。 – gkb0986