預定義宏是由編譯器提供的宏定義。
編譯器相關的宏#
不同的編譯器提供自己的一套預定義宏。
- 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 架構
如有紕漏,歡迎指正