预定义宏

预定义宏是由编译器提供的宏定义。

编译器相关的宏

不同的编译器提供自己的一套预定义宏。

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 架构

如有纰漏，欢迎指正