V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liyafe1997
V2EX  ›  C++

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

  •  
  •   liyafe1997 · 2022-06-29 18:03:34 +08:00 · 1454 次点击
    这是一个创建于 912 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    8 条回复    2023-05-03 11:05:41 +08:00
    786375312123
        1
    786375312123  
       2022-06-29 19:00:57 +08:00
    "#define 或者#include 头文件不完整的情况下做预处理,有多少做多少"

    什么意思?你可能对 c++或者编译过程有什么误解?还是说你以前基本没怎么写过 c++?
    liyafe1997
        2
    liyafe1997  
    OP
       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
        3
    littlewing  
       2022-06-29 19:54:58 +08:00
    为什么会有这种奇怪的需求?你想干什么,是否有其他更合适的方法?
    liyafe1997
        4
    liyafe1997  
    OP
       2022-06-29 20:05:44 +08:00
    @littlewing 目的是把程序尽可能还原成 C/C++本来的样子,以便做下一步工作
    有的人 /公司 /project 大量使用各种千奇百怪的 define 搞各种骚操作,简直 define 出了一种新语言,甚至一套“模板系统”。。。
    liyafe1997
        5
    liyafe1997  
    OP
       2022-06-29 20:57:38 +08:00
    找到解决方案了,https://pypi.org/project/pcpp/

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

    但是感觉要满足你的用途也还是需要改代码
    liyafe1997
        7
    liyafe1997  
    OP
       2022-06-30 17:02:47 +08:00
    @leimao 谢谢,上面那个 pcpp 可以完全满足我的需求
    alqaz
        8
    alqaz  
       2023-05-03 11:05:41 +08:00
    有一个我自己用觉得很不错的 https://github.com/fanf2/unifdef.git
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2746 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:45 · PVG 14:45 · LAX 22:45 · JFK 01:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.