在gcc
中,如何在编译C程序期间检查 C 预处理器定义是什么,特别是定义了哪些标准或特定于平台的宏定义?< / p>
答案 0 :(得分:16)
预定义的宏取决于标准和编译器实现它的方式。
对于海湾合作委员会:http://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html
对于Microsoft Visual Studio 8:http://msdn.microsoft.com/en-us/library/b0084kay(VS.80).aspx
此维基百科页面http://en.wikipedia.org/wiki/C_preprocessor#Compiler-specific_predefined_macros列出了如何转储某些预定义的宏
答案 1 :(得分:4)
编译器和平台的特定组合的预定义宏的可能来源是Sourceforge的Predef project。他们试图在所有平台上的所有C和C ++编译器中维护所有预定义宏的目录。在实践中,他们覆盖了GCC的相当多的平台,以及一些其他编译器。
他们通过仔细阅读文档以及shell脚本来实现这一目标,该脚本可以确定哪些宏是预定义的:它会尝试它们。我的理解是它实际上尝试了它可以在编译器和/或预处理器的可执行映像中找到的每个字符串,以查看它是否具有预定义。
他们很乐意将他们尚未拥有的任何信息添加到他们的数据库中。
答案 2 :(得分:0)
程序可以将宏定义为一个 点,稍后删除该定义, 然后提供不同的 之后的定义。因此,在 程序中的不同点,a 宏可能有不同的定义, 或根本没有定义。