20

最近、私が書いた C++ コードでコンパイル エラーに直面したので、C++11 コンパイラを使用しているかどうか尋ねられましたが、正直なところ、コンパイラのバージョンを確認する方法がわかりません。これを理解する方法はありますか??

ところで、MinGW の GCC コンパイラと GDB デバッガを含む IDE としてコードブロックを使用しています。また、Linux で C++ コードをコンパイルしている場合、コンパイラのバージョンを知るにはどのコマンドを実行すればよいですか?

4

3 に答える 3

24

それはトリッキーな質問かもしれません。C++11 は、コンパイラのバージョンではなく、標準のバージョンを指します。異なるコンパイラ、および特定のコンパイラの異なるバージョンは、通常、少なくとも最近のバージョンでは、標準のバージョンの混合を実装します。多かれ少なかれ、C++11 の実装はかなり新しく、おそらくかなりバグがあるからです。

ほとんどのコンパイラには、バージョンを出力するオプションがあります。多くの場合、詳細モードで体系的に出力されます。g++ の場合は、 を試してくださいg++ --version。g++ の最近のバージョンには C++11 のサポートがいくつかありますが、 (通常のまたは -std=c++0xではなく) でアクティブ化する必要があります。名前 (ではなく) が示すように、真の C++11ではありません。これは主要な新機能のいくつか (ほとんど?) の実装であり、さまざまなワーキング ペーパーに基づく暫定バージョンであり、最終的な標準ではありません。-std=c++03-std=c++98c++0xc++11

(FWIW: C++11 のすべてを完全に実装しているコンパイラはないと思いますが、間違っていることを証明したいと思います。)

于 2012-04-05T09:46:01.623 に答える
14

コンパイラのバージョンは次のように確認できます。

g++ --version

C++11 を使用しているかどうかはわかりません。C++11 の機能を使用するには、thr-std=c++0xフラグを指定してコンパイラを呼び出す必要があります。

g++ -std=c++0x ....

gcc はまだ c++11 を 100% 実装しておらず、どれだけ実装しているかはバージョンによって異なることに注意してください。サポートされている機能の表については、こちらを参照してください。

EDIT : 厳密に言えば、GCC を使用している場合、機能が不足しているため、完全に準拠した C++11 コンパイラを使用することはできません。しかし、バージョン 4.6.1 以降では、標準の大部分がカバーされています。

于 2012-04-05T09:38:02.693 に答える
6

Linux を使用している場合、バージョンの確認は簡単です。

> gcc --version

あなたが持っているバージョンを教えてくれます。GCC C++11 のサポートはまだ不完全であることに注意してください。詳細については、http: //gcc.gnu.org/projects/cxx0x.htmlを参照してください。

私自身、いくつかの C++11 機能、つまり初期化子リストとnullptr定数を使用しました。GCC 4.6 を使用していますが、問題なく動作しています。

編集:はい、@jaunchopanzaが言っ-std=c++0xたように、それを機能させるにはコンパイラフラグが必要です。Code::Blocks を使用している場合は、プロジェクトを右クリックしてBuild options...を選択し、Have g++ follow thecoming C++0x ISO C++ language standard [-std=c+ +0x]

于 2012-04-05T09:38:55.760 に答える