将简单的C#define转换为Rust常量

时间:2015-11-04 18:09:29

标签: c rust c-preprocessor

我有一个长篇故事和30KLoC标题的专有库。我想为它生成Rust的绑定。我几乎成功地使用了bindgen箱子。除bindgen之外,不能将宏常量转换为常规常量。因为这些常量是以模糊的方式定义的,比如

#define CONSTANT ((const_type)SOME_OTHER_CONSTANT)

那么,有没有办法将这些半常数转换为正常的Rust常量:

const Type name = value;

更新

显然,crate bindgen使用clang作为后端。如果向解析器提供了右标志,clang能够处理宏定义和其他类似的东西。那么,有人可以建议使用libclang API处理宏定义的好教程吗?

1 个答案:

答案 0 :(得分:0)

通过gcc -E(即预处理器)运行标头将删除#define。它可能会删除超出您想要的内容。

如果你想有选择地进行预处理,曾经有一个名为scpp的实用程序就是这样做的。除了要下载的一些tar文件之外,我无法立即找到它的引用,但你可能会有更多的运气。