C++ Preprocessor Cross-platform
编写c++跨平台应用程序时,会用到参考
- win32/64平台都会定义WIN32,而_WIN64只在64位上定义,因此先判断_WIN64
- 所有apple系统都会定义__APPLE__,包括MacOSX和iOS
- 大多编译器支持的宏定义,查询
- Apple平台宏定义(注意):
// TargetConditionals.h
TARGET_OS_WIN32 - Generated code will run under 32-bit Windows
TARGET_OS_UNIX - Generated code will run under some Unix (not OSX)
TARGET_OS_MAC - Generated code will run under Mac OS X variant
TARGET_OS_OSX - Generated code will run under OS X devices
TARGET_OS_IPHONE - Generated code for firmware, devices, or simulator
TARGET_OS_IOS - Generated code will run under iOS
TARGET_OS_TV - Generated code will run under Apple TV OS
TARGET_OS_WATCH - Generated code will run under Apple Watch OS
TARGET_OS_BRIDGE - Generated code will run under Bridge devices
TARGET_OS_SIMULATOR - Generated code will run under a simulator
TARGET_OS_EMBEDDED - Generated code for firmware
TARGET_IPHONE_SIMULATOR - DEPRECATED: Same as TARGET_OS_SIMULATOR
TARGET_OS_NANO - DEPRECATED: Same as TARGET_OS_WATCH
+------------------------------------------------+
| TARGET_OS_MAC |
| +---+ +-------------------------------------+ |
| | | | TARGET_OS_IPHONE | |
| |OSX| | +-----+ +----+ +-------+ +--------+ | |
| | | | | IOS | | TV | | WATCH | | BRIDGE | | |
| | | | +-----+ +----+ +-------+ +--------+ | |
| +---+ +-------------------------------------+ |
+------------------------------------------------+
#ifdef _WIN32
//define something for Windows (32-bit and 64-bit, this part is common)
#ifdef _WIN64
//define something for Windows (64-bit only)
#else
//define something for Windows (32-bit only)
#endif
#elif __APPLE__
#include "TargetConditionals.h"
#if TARGET_OS_SIMULATOR
// iOS Simulator
#elif TARGET_OS_IPHONE
// iOS device
#elif TARGET_OS_OSX
// Other kinds of Mac OS
#else
# error "Other Apple platform"
#endif
#elif defined(ANDROID) || defined(__ANDROID__) // both needed
// android
#elif __linux__
// linux
#elif __unix__ // all unices not caught above
// Unix
#elif defined(_POSIX_VERSION)
// POSIX
#else
# error "Unknown compiler"
#endif