猿问

GCC转储预处理器定义

GCC/g+是否有从命令行转储其预处理器定义的方法?我是说像__GNUC____STDC__等等。



12345678_0001
浏览 576回答 3
3回答

繁星淼淼

是的,使用-E -dM选项而不是-c。示例(将它们输出到stdout):&nbsp;gcc&nbsp;-dM&nbsp;-E&nbsp;-&nbsp;<&nbsp;/dev/nullC+&nbsp;g++&nbsp;-dM&nbsp;-E&nbsp;-x&nbsp;c++&nbsp;-&nbsp;<&nbsp;/dev/null从GCC手册:与正常输出不同,为执行预处理器(包括预定义宏)期间定义的所有宏生成一个‘#Defined’指令列表。这为您提供了一种查找预处理器版本中预定义的内容的方法。假设您没有文件foo.h,则命令touch&nbsp;foo.h;&nbsp;cpp&nbsp;-dM&nbsp;foo.h将显示所有预定义的宏。如果使用-dm而不使用-E选项,则-dm被解释为-fdump-rtl-mach的同义词。

万千封印

我通常是这样做的:$&nbsp;gcc&nbsp;-dM&nbsp;-E&nbsp;-&nbsp;<&nbsp;/dev/null注意,一些预处理器定义依赖于命令行选项-您可以通过将相关选项添加到上面的命令行来测试这些选项。例如,要查看默认情况下启用了哪些SSE 3/SSE4选项:$&nbsp;gcc&nbsp;-dM&nbsp;-E&nbsp;-&nbsp;<&nbsp;/dev/null&nbsp;|&nbsp;grep&nbsp;SSE[34]#define&nbsp;__SSE3__&nbsp;1#define&nbsp;__SSSE3__&nbsp;1然后比较一下-msse4具体如下:$&nbsp;gcc&nbsp;-dM&nbsp;-E&nbsp;-msse4&nbsp;-&nbsp;<&nbsp;/dev/null&nbsp;|&nbsp;grep&nbsp;SSE[34]#define&nbsp;__SSE3__&nbsp;1#define&nbsp;__SSE4_1__&nbsp;1#define&nbsp;__SSE4_2__&nbsp;1#define&nbsp;__SSSE3__&nbsp;1类似地,您可以看到两组不同的命令行选项之间有哪些选项不同,例如,比较预处理器定义的优化级别。-O0(无)和-O3(全部):$&nbsp;gcc&nbsp;-dM&nbsp;-E&nbsp;-O0&nbsp;-&nbsp;<&nbsp;/dev/null&nbsp;>&nbsp;/tmp/O0.txt $&nbsp;gcc&nbsp;-dM&nbsp;-E&nbsp;-O3&nbsp;-&nbsp;<&nbsp;/dev/null&nbsp;>&nbsp;/tmp/O3.txt $&nbsp;sdiff&nbsp;-s&nbsp;/tmp/O0.txt&nbsp;/tmp/O3.txt&nbsp; #define&nbsp;__NO_INLINE__&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;< &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;>&nbsp;#define&nbsp;__OPTIMIZE__&nbsp;1
随时随地看视频慕课网APP
我要回答