Visual Studioのバージョン間の違いについて(2008 → 2012)
でチラッと書いたことがあるんだけど
初音ミク冒険記のソースコードには
下記のようなロジックがある。
#if 1900 > _MSC_VER && _MSC_VER >= 1700
#include "EffekseerForDXLib.h"
#else
#error VisualStudio(C++)2012,2013のみ対応しています。
#endif
_MSC_VERという定義済みプリプロセッサマクロは、
ビルドする時にVisualStudioのバージョンチェックをする時に使う。
Windows版最初の時の初音ミク冒険記のソースコードは、
VisualStudio 2008で作られているので
VisualStudio 2008以降の
バージョンや_MSC_VER関連をまとめてみた。
参考:_MSC_VERマクロの値 (Visual Studio 2017まで)
| Visual Studioのバージョン |
内部バージョン番号 |
_MSC_VERの値 |
| Visual Studio 2008 |
9.0 |
1500 |
| Visual Studio 2010 |
10.0 |
1600 |
| Visual Studio 2012 |
11.0 |
1700 |
| Visual Studio 2013 |
12.0 |
1800 |
| Visual Studio 2015 |
14.0 |
1900 |
| Visual Studio 2017 |
14.1 |
1910 |
なので
#if 1900 > _MSC_VER && _MSC_VER >= 1700
#include "EffekseerForDXLib.h"
#else
#error VisualStudio(C++)2012,2013のみ対応しています。
#endif
このコードはVisualStudio 2012,2013の場合のみ
EffekseerForDXLib.hがインクルードされる。
実は、このようなロジックが、
初音ミク冒険記のEffekseer関連のソースに多数ある。
このため、
#if 1900 > _MSC_VER && _MSC_VER >= 1700
を
#if MSC_VER >= 1900
にしようとしたら、該当箇所全部を直さないといけない。
まぁ、一括置換すれば良いという話もあるんだが
そもそもバージョンアップのたびに
複数箇所を修正するのはメンドイ。
修正漏れも出てきたりしそうだしね。
どのみち、今回は該当箇所を全部直す必要があるので
次のVisualStudioのバージョンアップの時は
修正箇所がヘッダファイルを1箇所修正するだけで良い形にしとこう。
今のところ、自作のロジックではEffekseer関連だけなので
ヘッダファイルでは、下記のようにしておく。
#if MAIN
#if _MSC_VER >= 1900
int isUseEffekseer = TRUE;
#else
int isUseEffekseer = FALSE;
#endif
#else
extern int isUseEffekseer;
#endif
そしてEffekseer関連のソースでは、下記のようにしておく。
if(isUseEffekseer == FALSE){
// 何もしないで終了
return();
}
こんな感じにしとけば、修正箇所が絞られて
あちこちに#ifdefを使わなくて済んでスッキリしそうだね。