为GCC运行"轻型"预处理器

Cla*_*diu 15 c macros gcc c-preprocessor

有没有办法运行GCC预处理器,但仅适用于用户定义的宏?

我有一些单行和一些#ifdef等条件,我想看看我的代码在扩展时的样子.

实际上,包括扩展,我fprintf(stderr)转入fprintf(((__getreeent())->_stderr),等等.

Ark*_*kku 14

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
Run Code Online (Sandbox Code Playgroud)

当然,如果您包含任何标题,那么这些标题将包含在输出中.避免这种情况的一种方法可能是grep -v#includes(或者只是带有#include <和允许的#include ")来排除这些线.或者您可以指定-nostdinc删除标准包含的选项(但可能会留在本地库中,除非您指定包含路径以便找不到它们) - 但这会警告缺少标题.

编辑:或者使用预处理器本身使头部包含条件,将它们包装在类似的东西中#ifndef TESTING_PREPROCESSOR并使用-DTESTING_PREPROCESSOR.

  • +1 - 将`#include`行放在`#if`部分中的提示是那些简单但有效的事情之一,在尝试其他更复杂的事情之前浪费了其他一些努力. (2认同)