Visual Studio の場合だけコンパイルされるコードを書く | Programming Place Plus Visual Studio編

トップページVisual Studio編

この章の概要 🔗

この章の概要です。


C/C++ で、Visual Studio の場合だけコンパイルされるコードを書く 🔗

C言語や C++ で、Visual Studio 以外のコンパイラにも対応したプログラムを書きたいときがあるかもしれません。しかし、コンパイラごとに対応している機能が異なっていたり、記述のしかたが異なっていたりすることがあるため、あるコンパイラで正常にコンパイルできたソースファイルが、ほかのコンパイラではエラーになってしまうケースがあります。

このようなときには、プリプロセスによる条件コンパイルを活用して対処できます。つまり次のコード例のような感じで、コンパイラの種類ごとに、コンパイルされるコードを切り分けて書くということです。

#ifdef /* Visual Studio */
    // Visual Studio の場合にコンパイルされるコード
#else
    // Visual Studio でない場合にコンパイルされるコード
#endif

プリプロセスや条件コンパイルについての解説は、C言語編第23章や、新C++編「プリプロセス」にあります。

コンパイラの種類が何であるかは、コンパイラごとにある事前定義マクロによって判断できます。たとえば次のマクロが利用できます。

コンパイラ 定義されているマクロ
Visual Studio (MSVC) _MSC_VER
gcc __GNUC__
clang __clang__

したがって次のように書けます。サポート外のコンパイラに対しても、#error(C言語編第23章や、新C++編「プリプロセス」)で対応しておくと良いでしょう。

#ifdef _MSC_VER
    // Visual Studio の場合にコンパイルされるコード
#elif defined(__GNUC__)
    // gcc の場合にコンパイルされるコード
#elif defined(__clang__)
    // clang の場合にコンパイルされるコード
#else
    // 上記のいずれでもない場合のコンパイルされるコード
    #error "Unsupported compiler.\n"
#endif

Visual Studio のバージョン 🔗

さきほどの _MSC_VER というマクロは、Visual Studio のバージョンごとに異なる整数定数に置換されます。

置換結果はバージョンが上がるごとに大きな数になります。また、Visual Studio のマイナーバージョンアップのときにも数値が加算されることがあります。

Visual Studio バージョン 置換結果
2015 1900
2017 1910 ~ 1916
2019 1920 ~ 1929
2022 1930 ~ 1940(※Visual Studio 2022 バージョン 17.10 時点)

_MSC_VER の置換結果は、メジャーバージョンとマイナーバージョンを結合したものですが、さらに細かく、ビルドバージョンやリビジョン番号まで知ることができるマクロも用意されています。詳細は、Microsoft のドキュメントを参照してください。

参考リンク 🔗


更新履歴 🔗



Visual Studio編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る