回答:
ご存知のとおり、2つのオプションの違いは、C ++標準に違反/拡張するGNU拡張機能が有効になっているかどうかです。ここでは、GNU C ++拡張機能について説明します。C ++プログラムでは、ほとんどのGNU C拡張機能(ここで説明)を使用することもできます。ここで-Wpedantic
GCCオプションについて読むことも役に立ちます。
一部の拡張機能は-std=c++11
、標準と矛盾しない限り、を使用しても引き続き有効であることに注意してください。たとえば、MinGWコンパイラを使用する場合、機能するための拡張機能が必要Boost.Lexical_Cast
です。ただし、それらを使用しない限り、移植性を最大化するために、拡張機能を使用せずに標準に準拠することをお勧めします。これは、コンパイラを変更せざるを得ない場合に便利です。
gnu11
いない拡張機能を一覧表示するように編集することを検討しc++11
ますか?リンクしたリストはすべての拡張機能のものであり、あなた自身が示すように、それらの一部c++11
も同様に有効になっています(など__restrict__
)。
gnu
は拡張機能を参照しているため、移植可能なコードを作成する場合は、標準に固執し、拡張機能を完全に避ける必要があります。