【发布时间】:2013-06-01 04:13:55
【问题描述】:
我基本上需要用 Python 编写一个 C 预处理器,我四处寻找,因为我需要完全自定义我的代码并对正在发生的事情有一个完美的理解,所以我最好自己编写。
这就是我所在的位置:我首先解析一些头文件 (.h) 以找到 #define 关键字并使用所有已建立的指令(它们的值都有一个)建立一个字典。然后我需要根据之前找到的指令解析源文件 (.c)。
我目前用来检查代码是否需要处理的机制如下:我获取所有定义的名称及其值并执行exec("define_name = define_value")(未指定时值为'1')。然后为了解决诸如#if defined DEFINE_1 || defined DEFINE_2 && (DEFINE_3 == 10) .... 之类的条件,我删除了 C 预处理器关键字,使它们成为 Python 风格,从而生成 DEFINE_1 or defined DEFINE_2 and (DEFINE_3 == 10)。
我终于在那个字符串上使用eval(...) 来找出结果。
问题是我想知道是否有必要使用 exec / eval 并且很多人不愿意使用它们,有没有更好的解决方案?
【问题讨论】:
-
根据我使用基于 Python 的预处理器的经验,Python 速度太慢,无法实现。此外,例如标准库MSVC 不好预处理(尽管编译起来更糟)。你想解决什么问题?
标签: python c preprocessor c-preprocessor