有没有 C/C++做 部分预处理 的工具

2022-06-29 18:03:34 +08:00
 liyafe1997

需求大概就是在#define 或者#include 头文件不完整的情况下做预处理,有多少做多少,as much as possible ,缺失的保持原状。

如果直接用 gcc -E 的话会直接报错,找不到.h 或者相关定义

有没有什么工具能实现?(除了自己写

1415 次点击
所在节点    C++
8 条回复
786375312123
2022-06-29 19:00:57 +08:00
"#define 或者#include 头文件不完整的情况下做预处理,有多少做多少"

什么意思?你可能对 c++或者编译过程有什么误解?还是说你以前基本没怎么写过 c++?
liyafe1997
2022-06-29 19:40:30 +08:00
@786375312123
不考虑编译,只考虑预处理。
打个比方,比如我的程序里有:
#define aaa 10
#define bbb 20

int a = aaa;
int b = bbb;

预处理器会生成:
int a = 10;
int b = 20;

我需要的是,在缺失定义或者头文件的情况下,比如:
#define bbb 20

int a = aaa;
int b = bbb;

预处理后生成
int a = aaa;
int b = 20;

如果用现有的编译器的预处理器,比如 gcc -E ,会直接报错,找不到 aaa 。
littlewing
2022-06-29 19:54:58 +08:00
为什么会有这种奇怪的需求?你想干什么,是否有其他更合适的方法?
liyafe1997
2022-06-29 20:05:44 +08:00
@littlewing 目的是把程序尽可能还原成 C/C++本来的样子,以便做下一步工作
有的人 /公司 /project 大量使用各种千奇百怪的 define 搞各种骚操作,简直 define 出了一种新语言,甚至一套“模板系统”。。。
liyafe1997
2022-06-29 20:57:38 +08:00
找到解决方案了,https://pypi.org/project/pcpp/

这个 C preprocessor 可以做我想要的事情。
leimao
2022-06-30 08:40:49 +08:00
很多年前写过一个 C Processor 学生项目:
https://github.com/leimao/Simple_Preprocessor

但是感觉要满足你的用途也还是需要改代码
liyafe1997
2022-06-30 17:02:47 +08:00
@leimao 谢谢,上面那个 pcpp 可以完全满足我的需求
alqaz
2023-05-03 11:05:41 +08:00
有一个我自己用觉得很不错的 https://github.com/fanf2/unifdef.git

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/862999

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX