使用 `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 语法)
是否可以通过 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 语法)