g ++で-pedanticフラグを使用するかどうか


16

私はC ++を学んでおり、練習にはLinuxでg ++を使用しています。

  1. プログラマーとして働いている人がg ++ -pedanticフラグを使用しているかどうか、また実世界でのその重要性を知りたいです。

  2. 他のコンパイラについてはどうですか、これも可能ですか?これは事実上の標準になりましたか?

配列定義の次元として非const式を使用することは違法であると著者が指摘しているC ++ Primerを読んでいるので興味があります。g++ではデフォルトで許可されています。そして、私が知らない他のことがあるかもしれません。



回答:


21

はい、絶対にこれを行います。実際には、マニュアルページを研究し、より多くの警告をオンにする必要がある-pedantic-Wall行いますが。

いいえ、標準はありません。/W4たとえば、MSVCが使用します。


7
+1、私は通常-Wall -Wextra -Werror -pedantic -std=c++0x:)
greyfade

4
@JaredBurrows:-pedanticGCCのマニュアルではC専用であることが示唆されているため、実際にはC ++の使用をやめ-std=c++14ました。新しいプロジェクトでの使用に移行しました。
-greyfade

1
@greyfadeああ、私は言っておくべきだった-Wall -Wextra -Werror -std=c++14:)
ジャレッド・バロウズ

1
警告ではなくエラーを出す-pedantic-errorsを発見しました。
ガリック

6
@VillasVまあ-Werror、すべての警告をエラーに変えます。しかし-pedantic-errorsStandard ICO C++違反からエラーを作成するだけです。
ガリク

10

かなり長い間C ++をプログラミングしていませんが、このフラグを使用することをお勧めします。これは、標準に準拠したコードの作成を支援し、全員の生活を楽にします。私の知る限り、他のほとんどのコンパイラはgcc / g ++拡張機能をサポートしていません。

たとえば、元の開発者が非標準のコンパイラ拡張機能に対してコードを作成することを決めたためにコードをコンパイルできない場合、それは嫌いです。

C / C ++で書かれた膨大な量(たとえば20%)のLinuxプログラムはgcc / g ++以外ではコンパイルされないので、私は少し悲しくなります。常に基準を遵守してください。


2
私は他のコンパイラを使用してみました最後の時間は、私はそれがより多くのように20%だったと言うだろ、他のコンパイラで動作し、80%はgccの拡張に依存していました。
ジェリーコフィン

6

個人的に私は使用します:

-Wall -Wextra -Wshadow -Weffc ++ -Wstrict-aliasing -ansi -pedantic -Werror

したがって、多くの警告がオンになりますが、より重要なことは、すべての警告をエラーとして扱うことです(ほとんどの警告は思考の論理的なエラーであるため)。


2019年にこのリストに何か追加しますか?
Ayxan

1
@Ayxanこれは、誰もが使用することをお勧めする最小セットです。しかし、もっと便利なものがたくさんあります。しかし、ドキュメントを読み直して、それらがあなたに役立つかどうかを確認する必要があります。ご覧ください-Wunreachable-code -Wno-long-long
マーティンヨーク

1
@Ayxanプロファイリングコードを作成する場合:-g -pg -fprofile-arcs -ftest-coverage
Martin York

1
@Ayxanデバッグの構築時-g -O0
マーティンヨーク

1
@Ayxan量産コードを作成する場合-O3
マーティンヨーク

1

-pedanticフラグを使用することは非常に重要です。

現在の標準では、次のようなものを使用することをお勧めします。

-std=c++17 -Wall -Wextra -Werror -Wpedantic -pedantic-errors

どこ:

  • -std=c++172017年に公開されたC ++標準の改訂に準拠するよう指示しています詳細については、こちらをご覧ください

  • -Wall 次のように伝えます:

    一部のユーザーが疑わしいと考えている構造に関するすべての警告を有効にし、マクロ、つまりいくつかの警告と組み合わせても、回避する(または警告を防ぐために変更する)のは簡単です。

  • -Wextra すべてではないが、さらにいくつかの警告を有効にするように指示します。

  • -Werror すべての警告をエラーにするように指示します。

  • -Wpedanticまたは単に次の-pedanticように伝えます:

    厳密なISO CおよびISO C ++で要求されるすべての警告を発行します。禁止されている拡張機能を使用するすべてのプログラム、およびISO CおよびISO C ++に従わないその他のプログラムをすべて拒否します。

  • -pedantic-errors 基本標準(-Wpedanticを参照)で診断が必要な場合は常にエラーを出すように指示します。


このセットは通常、初心者に役立つだけでなく、各警告がエラーを引き起こす可能性があることを徐々に学習するため、通常の使用にも役立ちます。

すべての警告オプションについては、GNU / GCCページで詳しく説明しています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.