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