クロスプラットフォーム対応コードを書くときにプラットフォーム依存部分を切り分けるプリプロセッサディレクティブのメモ。
- Compiler
- GCC
- #ifdef __GNUC__
- #if __GNUC__ >= 3 // GCC3.0以上
- #ifdef __GNUC__
- Borland C++
- #ifdef __BORLANDC__
- intel Compiler
- #ifdef __INTEL_COMPILER
- Microsoft Compiler
- #ifdef _MSC_VER
- #if _MSC_VER >=600 // C Compiler 6.0以降 VC++含む
- #if _MSC_VER >=700 // C/C++ Compiler 7.0以降 VC++含む
- #if _MSC_VER >=800 // VC++1.0以降
- #if _MSC_VER >=900 // VC++2.0以降
- #if _MSC_VER >=1000 // VC++4.0以降
- #if _MSC_VER >=1010 // VC++4.1以降
- #if _MSC_VER >=1020 // VC++4.2以降
- #if _MSC_VER >=1100 // VC++5.0以降
- #if _MSC_VER >=1200 // VC++6.0以降
- #if _MSC_VER >=1300 // VC2002(VC7.0)以降
- #if _MSC_VER >=1310 // VC2003(VC7.1)以降
- #if _MSC_VER >=1400 // VC2005(VC8.0)以降
- #if _MSC_VER >=1500 // VC2008(VC9.0)以降
- #if _MSC_VER >=1600 // VC2010(VC10.0)以降
- #ifdef _MSC_VER
- GCC
- UNIX system
- UNIX
- #ifdef __unix
- #ifdef __unix__
- Linux
- #ifdef __linux
- #ifdef __linux__
- FreeBSD
- #ifdef __FreeBSD__
- NetBSD
- #ifdef __NetBSD__
- Cygwin
- #ifdef __CYGWIN__
- #ifdef __CYGWIN32__ // 32bit版Cygwin
- MinGW (-mno-cygwin)
- #ifdef __MINGW32__
- UNIX
- Windows system
- CUI
- #ifdef _CONSOLE
- GUI
- #ifdef _WINDOWS
- 32bit Windows
- #ifdef WIN32
- #ifdef _WIN32
- 64bit Windows
- #ifdef _WIN64
- Windows version
- #ifdef WINVER
- #if (WINVER >= 0x030a) // Windows 3.1以降
- #if (WINVER >= 0x0400) // Windows 95/ NT4.0以降
- #if (WINVER >= 0x0410) // Windows 98以降
- #if (WINVER >= 0x0500) // Windows Me/ 2000以降
- #if (WINVER >= 0x0501) // Windows XP/ Server 2003以降
- #if (WINVER >= 0x0502) // Windows XP SP2/ Server 2003 SP1以降
- #if (WINVER >= 0x0600) // Windows Vista/ Server 2008以降
- #if (WINVER >= 0x0601) // Windows 7以降
- #ifdef _WIN32_WINDOWS // Windows9x
- #if (_WIN32_WINDOWS >= 0x0400) // Windows 95以降
- #if (_WIN32_WINDOWS >= 0x0410) // Windows 98以降
- #if (_WIN32_WINDOWS >= 0x0500) // Windows Me以降
- #ifdef _WIN32_WINNT // WindowsNTx
- // Windows 2000以降(0x0500)
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN2K) - // Windows XP/ Server 2003以降(0x0501)
#if (_WIN32_WINNT >= _WIN32_WINNT_WINXP) - // Windows XP SP2/ Server 2003 SP1以降(0x0502)
#if (_WIN32_WINNT >= _WIN32_WINNT_WS03) - // Windows Vista以降(0x0600)
#if (_WIN32_WINNT >= _WIN32_WINNT_VISTA) - // Windows Server 2008以降(0x0600)
#if (_WIN32_WINNT >= _WIN32_WINNT_WS08) - // Windows 7以降(0x0601)
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
- // Windows 2000以降(0x0500)
- #ifdef _WIN32_WCE // WindowsCE
- #if (_WIN32_WCE >= 0x0420) // Windows Mobile 2003(PPC2003)
- #if (_WIN32_WCE >= 0x0421) // Windows Mobile 2003 SE(PPC2003SE)
- #if (_WIN32_WCE >= 0x0501) // Windows Mobile 5.0
- #if (_WIN32_WCE >= 0x0502) // Windows Mobile 6 Professional / Classic
- #if (WINCEOSVER >= 0x0300) // WindowsCE3.0(PPC2002)以降
- #if (WINCEOSVER >= 0x0420) // WindowsCE4.2(PPC2003)以降
- #if (WINCEOSVER >= 0x0500) // WindowsCE5.0(WM5.0)以降
- #ifdef WINVER
- Internet Explorer version
- #ifdef _WIN32_IE
- #if (_WIN32_IE>=0x0200) // Windows 95/NT 4.0(Comctl32.dll 4.00, Shell32.dll 4.00)
- #if (_WIN32_IE>=0x0300) // Internet Explorer 3.0, 3.01, 3.02
- #if (_WIN32_IE>=0x0400) // Internet Explorer 4.0
- #if (_WIN32_IE>=0x0401) // Internet Explorer 4.01
- #if (_WIN32_IE>=0x0500) // Internet Explorer 5.0, 5.0a, 5.0b
- #if (_WIN32_IE>=0x0501) // Internet Explorer 5.01
- #if (_WIN32_IE>=0x0550) // Internet Explorer 5.5
- #if (_WIN32_IE>=0x0600) // Internet Explorer 6.0
- #if (_WIN32_IE>=0x0601) // Internet Explorer 6.0 SP1
- #if (_WIN32_IE>=0x0603) // Internet Explorer 6.0 SP2
- #if (_WIN32_IE>=0x0700) // Internet Explorer 7.0
- #if (_WIN32_IE>=0x0800) // Internet Explorer 8.0
- #ifdef _WIN32_IE
- CUI
注意
プリプロセッサは、未定義の識別子を0として扱うため、#if __GNUC__ >= 3はGCC3以上として使えるが、
GCC2系かどうかを#if __GNUC__ < 3で判定しようとすると、GCCでないものも含まれる。
参考