为了账号安全,请及时绑定邮箱和手机立即绑定

GCC转储预处理器定义

GCC转储预处理器定义

C++
12345678_0001 2019-07-13 18:52:10
GCC/g+是否有从命令行转储其预处理器定义的方法?我是说像__GNUC__, __STDC__等等。
查看完整描述

3 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

是的,使用-E -dM选项而不是-c。示例(将它们输出到stdout):

 gcc -dM -E - < /dev/null

C+

 g++ -dM -E -x c++ - < /dev/null

GCC手册:

与正常输出不同,为执行预处理器(包括预定义宏)期间定义的所有宏生成一个‘#Defined’指令列表。这为您提供了一种查找预处理器版本中预定义的内容的方法。假设您没有文件foo.h,则命令

touch foo.h; cpp -dM foo.h

将显示所有预定义的宏。

如果使用-dm而不使用-E选项,则-dm被解释为-fdump-rtl-mach的同义词。


查看完整回答
反对 回复 2019-07-13
?
万千封印

TA贡献1891条经验 获得超3个赞

我通常是这样做的:

$ gcc -dM -E - < /dev/null

注意,一些预处理器定义依赖于命令行选项-您可以通过将相关选项添加到上面的命令行来测试这些选项。例如,要查看默认情况下启用了哪些SSE 3/SSE4选项:

$ gcc -dM -E - < /dev/null | grep SSE[34]#define __SSE3__ 1#define __SSSE3__ 1

然后比较一下-msse4具体如下:

$ gcc -dM -E -msse4 - < /dev/null | grep SSE[34]#define __SSE3__ 1#define __SSE4_1__ 1#define __SSE4_2__ 1#define __SSSE3__ 1

类似地,您可以看到两组不同的命令行选项之间有哪些选项不同,例如,比较预处理器定义的优化级别。-O0(无)和-O3(全部):

$ gcc -dM -E -O0 - < /dev/null > /tmp/O0.txt
$ gcc -dM -E -O3 - < /dev/null > /tmp/O3.txt
$ sdiff -s /tmp/O0.txt /tmp/O3.txt 
#define __NO_INLINE__ 1        <
                               > #define __OPTIMIZE__ 1


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 575 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信