コンパイラの C++ バージョン確認方法【gcc, clang, Visual Studio】

C++ には国際規格のバージョンがいくつかあります。
おおよそ規格の出版年に応じて命名されており、次のようなものがあります。

  • C++98
  • C++03
  • C++11
  • C++14
  • C++17
  • C++20

C++11 で大きな改定が行われており、これ以降のバージョンはモダン C++ と呼ばれたりします。

C++ バージョンによって、利用できる機能に差異があることから、コンパイラの対応バージョンを把握することは重要です。
以下、各種コンパイラにおける C++ バージョンの確認方法を掲載します。

Other Languages

目次

C++ バージョン確認のためのサンプルコード

早速ですがサンプルコードです。
コンパイラにて定義されているマクロの __cplusplus を出力することで確認することができます。

#include <iostream>

int main()
{
    std::cout << __cplusplus << std::endl;
    return 0;
}

gcc での出力結果例

デフォルトオプションでの出力

gcc での出力例です。

$ g++ --version
g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ g++ main.cc && ./a.out
201703

11.4.0 のバージョンでは、201703 の文字列が出力されます。
これは C++17 であることを表します。

std オプションを指定した場合の出力

gcc では std オプションで C++ バージョンを指定することもできます。
いくつかの出力例を示します。

$ g++ -std=c++98 main.cc && ./a.out
199711
$ g++ -std=c++03 main.cc && ./a.out
199711
$ g++ -std=c++11 main.cc && ./a.out
201103
$ g++ -std=c++14 main.cc && ./a.out
201402
$ g++ -std=c++17 main.cc && ./a.out
201703
$ g++ -std=c++20 main.cc && ./a.out
202002

なお、g++ の man を確認すると、バージョンによっては “Support is experimental” の記述がありますので利用には注意が必要です。

c++20
c++2a
    The 2020 ISO C++ standard plus amendments.  Support is experimental, and could change in incompatible ways in future releases.  The name c++2a is deprecated.

clang での出力例

clang での出力例です。
バージョン 14.0.0 の時点では、デフォルトが C++14 になっています。

$ clang++ --version
Ubuntu clang version 14.0.0-1ubuntu1.1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
$ clang++ main.cc && ./a.out
201402

なお、ここでは省略しますが、clang でも std オプションにて C++ バージョンの指定が可能です。

Visual Studio 2022 での出力例

Visual Studio 2022 で試行したところ、199711 の文字列が出力されました。
ここでは必要とする情報は取得できなそうです。

プロジェクトのプロパティで確認・指定ができますので、こちらで確認するようにしましょう。

  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次