宏可以在这里找到:
这里可以找到一般准则:
请发送更新/更正到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。