18

私は、Linux、OS X、および Windows のさまざまなフレーバーで開発および実行される大規模な共同 C++ プロジェクトに取り組んでいます。GCC、Visual Studio C++、および Intel C++ コンパイラを使用して、これらのプラットフォーム全体でコンパイルします。プロジェクトのコードの開発を開始する人が増えるにつれて、特定のオペレーティング システムの特定のコンパイラに固有の奇妙なエラーがコンパイルおよび実行時に見られるようになっています。この例は、特定の OS/コンパイラのペアが見つけたように見えるヘッダーを暗黙的にインクルードし、誤って派生クラスの基本クラスから関数をオーバーロードすることです。

私の目標は、GCC でのコンパイルをより厳密にし、すべてのプラットフォームでより多くのエラーを検出して、これらの問題に遭遇し続けないようにすることです。Google と GCC の man ページで見つけた、GCC で試してみようと考えているフラグのリストを次に示します。

GCC (およびそれほど重要ではない Visual Studio C++ と Intel C++ Compiler) を C++ 言語のより厳密な標準に準拠させるために人々が使用する他のフラグは何ですか? これらのいくつかは、すべてのコンパイラのすべてのバージョンで実装されていない可能性があるため、話しているコンパイラとバージョンを具体的にしてください。

4

7 に答える 7

8

他の誰もが示唆した衒学的エラーのほかに、IMOは、コンパイルプロセスの一部としてlintを実行することは常に良いことです。

そこにいくつかのツールがあります:

彼らはあなたの時間をたくさん節約します。

于 2009-01-29T09:30:28.310 に答える
3

以下の行をコピーしてマスターCMakeファイルに貼り付けます。以下の行は、自分自身をより厳密にテストするために、ほぼ最も有用なコンパイラ フラグで構成されています。

set(CMAKE_CXX_FLAGS "-O0 -fno-elide-constructors -pedantic-errors -ansi -Wextra -Wall     -Winit-self -Wold-style-cast -Woverloaded-virtual -Wuninitialized -Wmissing-declarations    -Winit-self -std=c++98")

CMake を使用しない場合は、フラグを二重引用符で囲んでコピーし、コンパイラに送信してください。

于 2013-12-19T07:04:46.010 に答える
3

でペダンティックな警告をエラーにすることができます-pedantic-errors。これにより、開発者はそれを無視できなくなります。その点については、すべての警告をエラーにすることも-Werrorできますが、場合によっては逆効果になる可能性があります(ただし、あなたのものではないかもしれません)。

全体として、厳格な基準を遵守する限り、-pedanticオプションが最も役立つと思います.

于 2009-01-29T07:20:53.553 に答える
3

-pedantic-errors .

詳しくはgcc(1)を参照してください。

于 2009-01-29T07:21:56.373 に答える
2

だけでなく、スイッチ-pendanticも提供する必要があります-std。より厳密なコンパイルが必要な場合は、準拠しようとしている標準を知っておく必要があります。通常、現在の C++ の場合、これは-std=c++98. ( -ansiC++ モードで同様の機能を実行しますが、-std=より明示的です。)

于 2009-01-29T07:42:55.317 に答える
1

同様の状況で、あきらめてACE フレームワークに移行し、プラットフォーム間の違いを隠しました。

于 2009-01-29T07:21:24.940 に答える