c - 为 GCC 运行 "light"预处理器

标签 c gcc macros c-preprocessor

有没有办法运行 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/

相关文章:

对命令提示符、Visual Studio exe 和文本文件感到困惑?

linux - 为什么在安装 GCC 时配置说找不到 C 编译器?

c++ - 这个 26KB 的可执行文件中存储了什么?

c++ - 错误: 'ALIGN' undeclared (first use in this function) with ALIGN defined into macro

c - 如何定义描述内存位置的宏?

c++ - 为什么没有 C++ 的 DELETE 宏的原因

C 将 bmp 像素读入二维数组

C编程返回0不终止程序

c - 在 C 中分配 1 毫秒或 2 毫秒的延迟?

c++ - 标准库是否需要符合标准?