2013-05-10 154 views
2

我不小心寫enum foo bar[];聲明沒有長度的數組,和gcc給我的警告「array 'bar' assumed to have one element」。製作「警告:數組‘富’假設有一個元素」錯誤

有什麼辦法可以讓gcc把它變成錯誤,而不是隻是警告我,假設我的意思是enum foo bar[1]?我想不出有什麼情況下我會故意排除一個數組的長度。

+0

根據6.9.2,試探性定義'enum foo bar [];'變爲'enum foo bar [] = {0};'如果翻譯單元中沒有外部定義。所以編譯器超越它的責任來警告它,要爲此感恩。不幸的是,由於默認情況下它會提醒你,我認爲你只能通過使所有的警告錯誤將它變成一個錯誤。 – 2013-05-10 02:41:55

+0

@DanielFischer到現在爲止,我已經鑽進了我的腦海,在C語言中,必須在聲明期間提及數組的大小,除非您正在初始化它。我是否正確?或者在C99或C11之後事物已更改?我得出的結論是'int arr [];'平均數組'arr'被假定爲'1',唯一的元素被初始化爲'0'? – 2013-05-10 02:50:01

+0

@Rüppell'sVulture這是文件範圍的東西。對於那些,如果在翻譯單元中沒有外部定義,並且對於沒有維度聲明的數組,則試探性定義變成真正的定義,這導致單元素陣列。對於塊範圍聲明,大小是強制的,或者明確地在括號之間,或者隱式地從初始化程序開始。 – 2013-05-10 02:58:10

回答

1

http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

您可以使用-Werror把所有警告變爲錯誤。我無法找到一個選項,只有那個變成了一個錯誤。

+0

也不妨打開-Wall,給你儘可能多的警告,儘可能地變成錯誤。幾乎從來沒有你不想在牆上修復所有的東西 – xaxxon 2013-05-10 04:25:31