预定义宏是由编译器提供的宏定义。
编译器相关的宏#
不同的编译器提供自己的一套预定义宏。
- 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 架构
如有纰漏,欢迎指正