我有一個gcc 4.3的奇怪問題,我想知道它是否是編譯器的特定問題,或者它是否是一個普通的C問題。當然,我使用了一個非常奇怪的構造,但我喜歡它,因爲它允許我執行一些否則將不可能的規則。 該項目分爲幾個模塊,每個模塊的結構都是不透明的。 在頭文件和1c文件中有typedef struct <tag> <type>
聲明,存在struct tag { ... };
,並且所有函數都通過<type> *
引用元素。不透明結構數組指針
每個模塊都知道它自己的結構,其他模塊的結構是不可見的。在一個模塊中,我不使用1個元素,但使用固定的元素數組。這意味着該模塊的某些功能可以與指向數組的指針一起工作。 我們稱之爲模塊wdi
。所以,我有例如
void write_all(wdi_type (*wdis)[MAX_WDI]);
和分配(我知道很不尋常的語法),直接右指針返回到一個數組。
wdi_type (*wdi_alloc(void))[MAX_WDI];
這GNU-C 3.4.6(Solaris SPARC上)下工作很出色,在CC,它還會編譯陽光編譯器V12(無法雖然測試它,因爲應用程序中斷的另一部分)。 雖然在gcc 4.3.3(也在4.4.6 x86-64和4.6.2 ARM上測試過),但它沒有。我收到編譯錯誤array type has incomplete element type
。 我不明白爲什麼編譯器會在這個階段需要這些信息。它不需要其他不透明結構的大小。
這是一個海灣合作委員會的錯誤?
標準說什麼?
我無法找到相關信息。我應該向GNU提交錯誤報告嗎?
謝謝,這就是我的想法。我將不得不改變我的代碼。遺憾的是,通過使用普通的'wdi_type *'而不是'wdi_type(* wdis)[MAX_WDI]',編譯器丟失了一個用於類型檢查的信息,這樣做更加安全。 – 2013-04-10 05:53:27