gcc已经定义了哪些C预处理宏?

8
在gcc中,我如何检查在编译C程序时使用了哪些C预处理器定义,特别是哪些标准或平台特定的宏定义被定义了?

6
在gcc中,运行gcc -dM -E - < /dev/null。在MSVC中也有类似的开关,但我记不清了。 - Joe D
3个回答

16

7
记录答案:gcc -dM -E - < /dev/null(翻译说明:该命令用于检查 GCC 编译器的默认预定义宏。) - Adrian Panasiuk

4
一个特定编译器和平台组合的预定义宏可能的来源是Sourceforge上的Predef project。他们试图维护所有C和C++编译器在所有平台上的所有预定义宏的目录。在实践中,他们对GCC有相当数量的平台覆盖,并且还有其他编译器的一些零星覆盖。
他们通过仔细阅读文档以及一个 shell 脚本来实现这一点,该脚本通过尝试宏来强制确定哪些宏是预定义的:它会尝试在编译器和/或预处理器的可执行映像中找到的每个字符串,看它是否具有预定义的含义。
他们将乐意添加到他们数据库中尚未拥有的任何信息。

0
一个程序可以在某个时候定义一个宏,稍后删除该定义,然后再提供另一个定义。因此,在程序的不同点,宏可能具有不同的定义,或者根本没有定义。

通常对于宏来说是正确的,但问题是关于预定义宏。 - CsTamas
@CsTamas:你是说你不能取消预定义的宏吗? - Mitch Wheat
@Mitch Wheat:不,我不是这个意思。但问题是不同的。 - CsTamas
虽然你的回答是正确的,但是有些宏是由编译器定义的,它们被未定义会很奇怪。 - GManNickG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接