14

ANSI C (C99) の警告/エラーを強制するには、どの gcc オプションを使用すればよいですか? gcc (GCC) 3.4.2 (mingw スペシャル)

私は使用しています: gcc -pedantic -ansi -std=c99 これは正しいですか?

4

3 に答える 3

30

旗は-ansi旗と同義-std=c89です。

with を使用-std=c99するだけ-pedanticで十分です。

疑問がある場合は、いつでもGCC ドキュメント を参照できます。GCC 3.4.2 の時点で、読むべき章は2 - GCC がサポートする言語標準です。

于 2009-11-30T19:46:53.940 に答える
8

これは古い質問ですが、いくつかの点を追加したかっただけです。

まず、GCC に提供する汎用コマンドライン スイッチのセットに関係なく、現在、GCC にすべての制約違反を「エラー」として報告させ、その他すべてを「警告」として報告させることはできないようです。GCC が「警告」として報告する診断メッセージの一部は、C 言語の観点からは、実際には制約違反(つまり「エラー」) ですが、GCC にその事実を認識させて「エラー」診断を生成させる方法はありません。個々の警告タイプを微調整することで、より正確な分離を実現できる可能性は十分にありますが、GCC 設定が適切な一致を達成するのに十分な粒度を提供するかどうかはわかりません。

次に、GCC は-pedantic-errors、plain の代わりに使用できるオプションを提供します-pedantic。これは、診断メッセージを「エラー」と「警告」に (前述のように) より正確に分類できるようにすることを目的としています。それでもまだ完璧ではありません。

PS 言語仕様では、診断メッセージを「エラー」と「警告」に分離することを要求/定義していませんが、実際には、多くのプログラマーは制約違反が「エラー」として報告されることを期待しています。質問で「警告/エラーを強制する」と述べたとき、あなたはそのようなことを意味していたのではないかと思いました。

于 2010-01-25T19:06:31.980 に答える
4
-ansi
    In C mode, this is equivalent to -std=c89. In C++ mode, it is equivalent to -std=c++98.

ANSI C は (まだ) C99 と同じではありません。また、-Wall興味があるかもしれませんが、-pedanticあなたがやりたいことだけをすべきです。

于 2009-11-30T19:45:51.367 に答える