有没有办法运行 GCC预处理器,但仅适用于用户定义的宏?
我有一些单行代码和一些 #ifdef
等条件语句,我想看看当这些代码被展开时我的代码是什么样子的。
实际上,包含得到扩展,我的 fprintf(stderr)
变成了 fprintf(((__getreeent())->_stderr)
,等等。
最佳答案
调用cpp
直接,例如
$ cat >foo.c <<EOF
#define FOO
#ifdef FOO
foo is defined
#else
foo is not defined
#endif
EOF
$ cpp foo.c
# 1 "foo.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "foo.c"
foo is defined
当然,如果您包含任何 header ,那么这些 header 将包含在输出中。避免这种情况的一种方法可能是 grep -v
用 #include
划线s(或者可能只是带有 #include <
并允许 #include "
的)。或者您可以指定 -nostdinc
仅删除标准包含的选项(但可能会保留在本地库中,除非您指定包含路径,这样它们就不会被发现)——不过,这会警告缺少 header 。
编辑:或者使用预处理器本身使 header 的包含成为条件,将它们包装在类似 #ifndef TESTING_PREPROCESSOR
的内容中并使用 -DTESTING_PREPROCESSOR
.
关于c - 为 GCC 运行 "light"预处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2615931/