Gccとclangのコンパイルパラメーターとしての-std=c++11
と-std=gnu++11
の違いは何ですか? c99
とgnu99
についても同じ質問ですか?私はC++とC標準について知っています、それは私が興味を持っているパラメータの違いです。
私はそれがいくつかの拡張機能に関係していることをどこかで読んだことがありますが、どの拡張機能と新しいプロジェクトのためにどちらを選択するかは明確ではありません。
ご存じのとおり、2つのオプションの違いは、C++標準に違反する/拡張するGNU拡張機能が有効かどうかです。 GNU C++拡張機能については ここ で説明されています。また、ほとんどのGNU C拡張( here で説明)をC++プログラムで使用できます。 -Wpedantic
GCCオプション here について読むことも役立ちます。
-std=c++11
を使用する場合、標準と矛盾しない限り、一部の拡張機能が引き続き有効であることに注意してください。たとえば、MinGWコンパイラを使用する場合、Boost.Lexical_Cast
が機能するための拡張機能が必要です。ただし、それらのいずれも使用しない限り、移植性を最大限に高めるために拡張機能を使用せずに標準に準拠することをお勧めします。これは、コンパイラを変更せざるを得ない場合に便利です。