3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Visual C++でC++のバージョンを取得する方法

Last updated at Posted at 2020-11-11

はじめに

筆者は、まだまだC++を学び始めて半年程度で、最近デザインパターンなどを意識し始めた、脱初心者レベルである。
また、本記事の執筆の際には、「Microsoft Visual Studio Community 2019 Version 16.6.5」環境で検証している。

マクロ「__cplusplus」がおかしい件

C++のバージョンをC++コード側で取得しようと思い、マクロ「__cplusplus」を使ってみた。

long version = __cplusplus;
std::cout << "C++ Version : " << version << "\n";

// 実行結果:C++ Version : 199711

この199711Lは、C++98を示すバージョンのようで、明らかに不正確である。
(shared_ptrとかclampとか使えてるからC++17以上でないとおかしい)

C++バージョンに応じた、マクロ__cplusplusの値は、こちらを参照。
https://cpprefjp.github.io/international-standard.html#list-of-iso-cpp

プロジェクトプロパティのC++バージョンをC++14やC++17に指定しても同様であった。
どうやら、これはVisual C++固有の仕様であるっぽい。
※追記:このマクロを有効化する手段あり(詳細は後述)

Visual C++でC++のバージョンを取得する方法

色々と調べてみたところ、C++のバージョン(と思われるもの)を記したマクロ「_MSVC_LANG」があるようで、充分代用が効きそうであった。

long version = _MSVC_LANG;
std::cout << "Visual C++ Version : " << version << "\n";

// プロパティオプションがC++14の実行結果:Visual C++ Version : 201402
// プロパティオプションがC++17の実行結果:Visual C++ Version : 201703

なるほど、凄く分かりやすい。
これを使って、良い感じに自作マクロ定義してあげると、Visual Studioにも対応したC++バージョンに応じた実装が可能になりそう。
勉強になった。

追記:Visual C++での「__cplusplus」 マクロの有効化

uemurajさんにコメントで教えて頂いたやり方が、もっと良さげだったので追記しておく。(素晴らしい情報提供ありがとうございます。)

  1. プロジェクトの [プロパティ ページ]を開く
  2. [構成プロパティ] > [C/C++] > [コマンド ライン]まで移動
  3. [追加オプション] ウィンドウに以下の2つのどちらかを追加し、適用。(筆者は前者を使用)
/Zc:__cplusplus
/Zc:__cplusplus-

参考:/Zc:__cplusplus (更新された __cplusplus マクロの有効化) | Microsoft Docs

この設定を適用した状態で、以下の内容で実行した結果、望ましい結果が得られた。

// マクロ「__cplusplus」を有効化したうえで使用した場合
long lCppVersion = __cplusplus;
std::cout << "マクロ「__cplusplus」 : " << lCppVersion << "\n";

// マクロ「_MSVC_LANG」を使用した場合
long lVCppVersion = _MSVC_LANG;
std::cout << "マクロ「_MSVC_LANG」 : " << lVCppVersion << "\n";

// プロジェクトプロパティでC++14を指定時の実行結果
// マクロ「__cplusplus」 : 201402
// マクロ「_MSVC_LANG」 : 201402

参考にしたサイト

3
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?