宏可以在這裡找到:
這裡可以找到一般準則:
請發送更新/更正到predef-contribute或通過GitHub上的拉請請求。
C和C ++編譯器會自動定義某些可用於檢查編譯器或操作系統功能的宏。這在編寫便攜式軟件時很有用。
這些頁面列出了各種預定義的編譯器宏,可用於識別標準,編譯器,操作系統,硬件體系結構,甚至在編譯時基本的運行時庫。
例如,如果我們想使用通用或不透明的指針類型,則使用無效指針。但是,古代K&R編譯器(從第一個ANSI C標準之前開始)不支持無效指針。相反,我們可以定義自己的類型:
#if defined( __STDC__ ) || defined( __cplusplus ) || defined( _MSC_EXTENSIONS )
typedef void * t_pointer ;
#else
typedef char * t_pointer ;
#endif另一個示例,Microsoft Visual C ++版本4.2僅通過一次包含一個文件來減少編譯時間(如果未定義_MSC_VER ),則它將評估為0(零) - 但是,有些編譯器可能會抱怨不確定的宏))
#if defined( _MSC_VER ) && ( _MSC_VER >= 1020 )
#pragma once
#endif這些頁面中包含的宏已通過供應商文檔,定義腳本,貢獻者和第三方源代碼獲得。不能保證給出宏的正確性。
通常使用的替代方法是AutoConf,它是檢查各種功能(包括編譯選項)的功能更強大的工具。但是,AutoConf相當以UNIX為中心,並且需要在其他平台上使用Unix層(例如Windows上的Cygwin)。其他替代方案是BuildTool,Cmake,Scons,PMK,Jam,Ant和Bakefile。
Bjorn Reese,Daniel Stenberg,Greg Roelofs,Steven G. Johnson,Wlodzimierz Abx Skiba,Marc Finet,Marc Finet,Philip Newton,Mitchell Charity,Christian Klutz,Seo Sanghyeon,Chris Sanghyeon,Chris Adami,Geoff Clare,Geoff Clare,Geoff Clare,Dan Fandrich,Dan Fandrich,Mike Gorchak,Yuriia yuriia,yuriia,yuriia,yuriia,yuriia,yuriia thev eel,gyrael,gyrael thev gy eel venv eel,gy gy ,, Zeitlin, Steve White, Thomas David Rivers, Tom Honermann, Martin Mitas, Dinesh Chhadwa, Erik Faye-Lund, Leo Davis, Paul Hsieh, Roland Schwarz, Darko Kolakovic, Andy Buonviri, Ming Kin Lai, Kent Johnson, Helmut Bauer, Oliver Schneider, Ron Pimblett, Jose Luis Rodriguez Garcia, Jeroen Ruigrok van der Werven, Uffe Jakobsen, Bryan Ashby, Bruno Haible, Artur Bac, Terry Schwarz, Leo Davis, Markus Duft, William Dang, Paul Green, Ruben Van Boxem, Pau Garcia i Quiles, Mikulas Patocka, Leo Davis, Mark Ferry, Holger Machens, Simon Watts, Paul Hargrove,漢斯 - 克里斯托夫斯坦納(Hans-Christoph Steiner),杰拉爾德(Gerald)梳理,丹尼斯·布蘭特(Denys Bulant),馬西莫·莫拉拉(Massimo Morara),傑里米·貝內特(Jeremy Bennett),吉利姆·喬弗(Guillem Jover),里庫·沃皮奧(Riku Doipio),雅克·佩萊蒂爾(Jacques Pelletier),馬克·賈維(Mark Jarvin Andreas Mohr,,Sverre Hvammen Johansen,Stefan Tauner,Daniel Garcia,Ozkan Sezer,Dean Saridakis,Frank Long,Kevin Adler。