预定义宏是由编译器提供的宏定义。
编译器相关的宏#
不同的编译器提供自己的一套预定义宏。
- GCC
__GNUC__:GCC 的主版本号。__GNUC_MINOR__:GCC 的次版本号。__GNUC_PATCHLEVEL__:GCC 的补丁级别号。
- Clang
__clang__:使用 Clang 编译器时被定义。__clang_major__:Clang 的主版本号__clang_minor__:Clang 的次版本号__clang_patchlevel__:Clang 的补丁级别号
- MSVC
_MSC_VER:MSVC 的版本号。_MSC_BUILD:MSVC 构建号
操作系统相关的宏#
- Windows
_WIN32:在 32 位和 64 位 Windows 系统上都会被定义。_WIN64:仅在 64 位 Windows 系统上被定义。
- Unix 或 类 Unix
__unix__:在 Unix 和类 Unix 系统(如 Linux)上被定义。__APPLE__:在 macOS 和 iOS 系统上被定义。__linux__:在 Linux 系统上被定义。__FreeBSD__:在 FreeBSD 系统上被定义。__OpenBSD__:在 OpenBSD 系统上被定义。__NetBSD__:在 NetBSD 系统上被定义。__DragonFly__:在 DragonFly BSD 系统上被定义。__sun:在 Solaris 系统上被定义。__hpux:在 HP-UX 系统上被定义。__sgi:在 IRIX 系统上被定义。__AIX:在 AIX 系统上被定义。
- 其他
__ANDROID__:在 Android 平台上被定义。__CYGWIN__:在 Cygwin 环境下被定义。
标准库相关的宏#
__cplusplus:用于指示编译器是否正在编译 C++ 代码。如果编译器正在编译 C++ 代码,则该宏的值为一个非零值;否则,该宏未定义。__STDC__:用于指示编译器是否遵循 C 标准。如果编译器遵循 C 标准,则该宏的值为 1;否则,该宏未定义。__STDC_VERSION_:C 标准的版本。
硬件架构相关的宏#
__arm__:arm 架构__x86_64__:x86_64 架构
如有纰漏,欢迎指正