2009-12-29 76 views
8

我最近在gcc上啓用了-pedantic選項,現在我已經有兩三頁「ISO C90禁止混合聲明和代碼」的警告。「混合聲明和代碼」警告,是否值得處理?

我與這個項目的目標是能夠部署它與C編譯器的任何主流系統上,所以我知道它不會是明智的假設C99將無處不在的支持,但它甚至值得我有時間解決這些警告?

是否還有系統與c編譯器不支持混合聲明和代碼?

+0

-pedantic提出警告,這是好學的。我會說這些警告是實際用途的浪費時間。 – 2009-12-29 17:46:39

回答

6

那麼,您是否打算在C89/90或C99中編寫代碼?

由於這是您似乎關注的唯一警告,顯然您的代碼實際上是用C89/90編寫的。如果確實如此,並且您打算堅持使用C89/90,那麼我會堅持嚴格的C89/90,並將所有聲明移至塊的開頭。

另一方面,如果您願意並計劃切換到C99,那麼「放錯位置」的聲明不再是問題。那麼你的主要擔心就是平臺/編譯器的支持。 MS Visual Studio C編譯器是C89/90編譯器。這是一個問題嗎? (考慮到GCC在Windows平臺上可用)。

+0

我不打算遵守任何特定的標準,我只是想確信我的代碼將在任何主流c編譯器上編譯 – 2009-12-29 23:46:19

+3

在這種情況下,答案是:否,它不會在任何mainsream C編譯器上編譯。 MS VIsual Studio編譯器符合C89/90,它不會編譯這些代碼。 – AnT 2009-12-30 03:36:06

1

我不確定我會改變它。然而,如果你確實想要,這很容易(所以也許你應該);但是,只需在開始代碼塊後立即完成所有聲明。如果您絕對必須在以後定義它們,請使用另一個嵌套代碼塊。

1

IIRC,Visual C++不允許在C模式下混合聲明和代碼。

Visual C++在一般的C99支持方面一直落後。然而,最近情況可能已經有所改善,並且可能無論如何都可以用C++模式編譯你的代碼。

2

Visual Studio C編譯器不允許混合聲明和代碼。微軟可能永遠不會將完整的C99支持添加到Visual Studio; C在Windows世界中不夠重要。

5

如果您想成爲-pedantic約C99標準添加選項-std=c99

個人而言,我喜歡較舊的未混合風格,因爲它可以更容易地審計函數正在使用的內存類型,並在返回之前決定可能需要釋放的內存。

0

我會消除特定的警告,因爲混合代碼和聲明不是廣泛支持的功能。

其實我和我正在寫的庫有同樣的問題。我使用可變宏,但似乎更支持。

爲了確保我的圖書館能夠真正被其他人使用,我將用盡可能多的編譯器來測試它。我已經用Visual C++ Express和Pelles C完成了它,我會嘗試其他一些(至少OpenWatcom,Mars C和lcc-Win32)。

不幸的是,SourceForge不再提供幾年前用於編譯器的場,我無法在商業Unix編譯器上測試它。