在跨平台编程中,通过宏来区分不同的平台是一种较为常见的方法。
1 不同平台
1.1 Windows
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #ifdef _WIN32 #ifdef _WIN64 #else #endif
#ifdef _WINDOWS
#ifdef _CONSOLE
#ifdef WINVER #if (WINVER >= 0x030a) #if (WINVER >= 0x0400) #if (WINVER >= 0x0410) #if (WINVER >= 0x0500) #if (WINVER >= 0x0501) #if (WINVER >= 0x0600) #if (WINVER >= 0x0601)
#ifdef __DOS__ #ifdef __MSDOS__
#ifdef __CYGWIN__
|
1.2 Unix
1 2 3 4 5 6 7 8 9 10 11 12 13
| #ifdef __unix #ifdef __unix__
#ifdef __linux #ifdef __linux__
#ifdef __FreeBSD__
#ifdef __NetBSD__
|
1.3 MacOS & iOS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #ifdef __APPLE__ #include "TargetConditionals.h" #if TARGET_IPHONE_SIMULATOR #elif TARGET_OS_IPHONE #elif TARGET_OS_MAC #else #endif
#ifdef Macintosh
#ifdef __APPLE__&&__MACH__
|
1.4 Android
1 2 3 4 5 6
| #ifdef __ANDROID__ #if __ANDROID_API__ >= 1 #if __ANDROID_API__ >= 5 #if __ANDROID_API__ >= 11 #if __ANDROID_API__ >= 1 #if __ANDROID_API__ >= 1
|
2 不同编译器
2.1 GCC
1 2
| #ifdef __GNUC__ #if __GNUC__ >= 3
|
2.2 Visual C++
1 2 3 4 5 6 7 8 9 10 11 12
| #ifdef _MSC_VER (非VC编译器很多地方也有定义) #if _MSC_VER >= 1000 #if _MSC_VER >= 1100 #if _MSC_VER >= 1200 #if _MSC_VER >= 1300 #if _MSC_VER >= 1400 #if _MSC_VER >= 1500 #if _MSC_VER >= 1600 #if _MSC_VER >= 1700 #if _MSC_VER >= 1800 #if _MSC_VER >= 1900 #if _MSC_VER >= 1910
|
2.3 Borland C++
2.4 CLANG
3 其它
todo