使用 `gcc -E` 将预处理器指令保留为注释

preserve preprocessor directives as comments with `gcc -E`

是否可以通过 gcc -E 实现这样的目标?

src.c:

z
#define FOO bar
z

实际预处理结果:

# 1 "src.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "src.c"
z

z

所需的预处理结果:

# 1 "src.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "src.c"
z
/* #define FOO bar */
z

它不能直接完成,但如果你真的想要这个,你可以将 -dD 选项传递给 cpp(通过 gcc 驱动程序它可能看起来像 -Wp,-dD;然后进一步处理将 #define 转换为注释的输出。

-dD 告诉预处理器在结果输出中保留 #define 指令。

如果你想将定义保留为注释,也许你可以学习 MCPP 手册,我记得有一个选项可以做到这一点。 至少-C保留注释,-K描述为"embed macro annotation into comments".

https://linux.die.net/man/1/mcpp

What does "macro annotations embedding in comments" mean in mcpp?

如果这不起作用,您将不得不制作一个解析器。要么将 clang 用作库并迭代预处理器令牌。或者用 AntlR 自己做(有很多现成的 C 语法)