在gcc
中,如何检查在编译C程序的过程中定义了哪些预处理器,特别是定义了哪些标准或平台特定的宏定义?在gcc中已经定义了哪些C预处理器宏?
回答
预定义的宏取决于标准和编译器实现它的方式。
对于GCC: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列出了如何在一些预定义宏倾倒
只是为了记录答案:gcc -dM -E - dev/null – 2009-07-27 06:09:05
程序可以定义一个宏一个 点,稍后删除该定义,然后在此之后提供不同的 定义。因此,在 程序中的不同点,一个 宏可能有不同的定义, 或根本没有定义。
一般对于宏来说是正确的,但问题是关于预定义的宏 – CsTamas 2009-07-27 06:12:35
编译器和平台的特定组合的预定义宏的可能来源是Sourceforge的Predef project。他们试图维护所有平台上所有C和C++编译器中所有预定义宏的目录。实际上,他们已经涵盖了GCC的一些平台,以及其他一些编译器。
他们通过认真阅读文档以及一个shell脚本来实现这一目标,该脚本能够指出哪些宏是预先定义的难题:尝试它们。我的理解是,它实际上会尝试每个可以在编译器和/或预处理器的可执行映像中找到的字符串,以查看它是否具有预定义的含义。
他们会很高兴地将他们尚未拥有的任何信息添加到他们的数据库中。
在gcc中,执行`gcc -dM -E - dev/null`。有一个类似的MSVC开关,但我不记得它。 – 2010-08-12 13:33:57