2010-11-29 12 views
3

私は、C++を学んでいるときに常にg ++を使ってこれらのフラグを使用することが有益なのでしょうか?C + +を勉強している間、私は常にg ++で-Wallと-pedanticスイッチを使うべきですか?

おかげ

+1

「私はいつもそうすべきですか」というのは、個人的な意見のための招待状になりがちです...意見が一致する傾向がある人は、彼らの支持を表明する傾向がありますが、異なる視点を好む人は異議を提起する傾向があります。 –

+2

追加する: 最初の一見で、 "警告なしのコードを学ぶ"というのは素晴らしいアイデアのように聞こえるし、良い方法のように聞こえる。 一方、あなたが教科書や他の場所にあるオープンソースのコードを試している場合でも、自分で書かれたコードサンプルが出現するとすぐにプラグマティズムが有効になります。そのコードは、特定のコンパイラでは完全に警告フリーではありません。 –

答えて

2

限り、あなたはおそらく-Wallと警告になります他の人によって書かれたコードサンプルを理解して、[はい、それは自由であるコードを書くのが習慣であなたを取得するために使用することをおフラグですコンパイラが識別できる潜在的な灰色領域の数。一方、よりトリッキーなケースです。

-pedantic GCC 4.4.4のマンページには、次のようなことが書いてあります。

厳密なISO CおよびISO C++で要求されるすべての警告を発行します。禁止された拡張子を使用するすべてのプログラムと、 のISO CおよびISO C++に従わない他のプログラムを拒否します。 ISO Cの場合、使用される-stdオプションで指定されたISO C標準のバージョンに従います。

有効なISO CおよびISO C++プログラムは、このオプションの有無にかかわらず適切にコンパイルする必要があります(まれに-ansiまたは-stdオプションを指定する必要があります。 ISO Cの必須バージョン)。ただし、このオプションがなければ、特定のGNU拡張機能や従来のCおよびC++機能もサポートされています。 の場合、このオプションは拒否されます。

-pedanticは、名前の先頭と末尾が__の代替キーワードの使用に関する警告メッセージを表示しません。 「__拡張子__」に続く式は、 の式言語警告も無効になっています。ただし、これらのエスケープルートを使用するのはシステムヘッダーファイルだけです。アプリケーションプログラムは を避けるべきです。

一部のユーザーは、厳密なISO C準拠のプログラムをチェックするために、-pedanticを使用しようとします。彼らはすぐに彼らが望んでいるものをやっていないことがわかります。 ISO以外の慣行ではありませんが、ISO Cが診断を必要とするものと診断が追加されたものがあります。

ISO Cに準拠しなかったことを報告する機能は、場合によっては有益かもしれませんが、かなりの追加作業が必要となり、 は-pedanticとはかなり異なります。近い将来、そのような機能をサポートする計画はありません。

1

ない正確な答えが、効果的なC++(スコットメイヤーの本)のガイドラインに違反する構築物について警告を発する-Weffc++フラグがあります。

これらのガイドラインは良好ですが、厳密すぎる場合もあります。 STLヘッダーが警告を出します。

+0

'-I/PATH/TO/STL'ではなく' -isystem/PATH/TO/STL'をインクルードすると、警告を出すシステムヘッダを避けることができます。 – ideasman42

関連する問題