GCC转储预处理器定义
有没有办法让gcc / g ++从命令行转储它的预处理程序定义? 我的意思是__GNUC__
, __STDC__
等等。
是的,使用-E -dM
选项而不是-c。 示例(将它们输出到stdout):
gcc -dM -E - < /dev/null
从gcc手册:
替代正常输出,为预处理器执行过程中定义的所有宏生成一个`#define'指令列表,其中包括预定义的宏。 这为您提供了一种查找预处理器版本中预定义内容的方法。 假设你没有文件foo.h,该命令
touch foo.h; cpp -dM foo.h
将显示所有预定义的宏。
如果使用不带-E选项的-dM,则将-dM解释为-fdump-rtl-mach的同义词。
我通常这样做:
$ gcc -dM -E - < /dev/null
请注意,某些预处理器定义依赖于命令行选项 - 您可以通过将相关选项添加到上述命令行来测试这些选项。 例如,要查看默认启用了哪些SSE3 / 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
迟到的答案 - 我发现其他答案很有用 - 并且想添加一些额外的内容。
如何转储来自特定头文件的预处理器宏?
echo "#include <sys/socket.h>" | gcc -E -dM -
特别是,我想看看我的系统上定义了什么SOMAXCONN。 我知道我可以打开标准头文件,但有时我必须搜索一下才能找到头文件位置。 相反,我可以使用这一行:
$ echo "#include <sys/socket.h>" | gcc -E -dM - | grep SOMAXCONN
#define SOMAXCONN 128
$
链接地址: http://www.djcxy.com/p/85783.html