【发布时间】:2016-05-30 06:51:35
【问题描述】:
我有一个专有库,内容很长,标题为 30KLoC。我想为 Rust 生成绑定。我几乎成功地使用了bindgen crate。除了bindgen 不能将宏常量转换为普通常量。因为这些常量是以一种模糊的方式定义的,比如
#define CONSTANT ((const_type)SOME_OTHER_CONSTANT)
那么,有没有办法将这样的半常量转换为普通的 Rust 常量:
const Type name = value;
更新
显然,crate bindgen 使用 clang 作为其后端。如果向解析器提供了正确的标志,clang 能够处理宏定义和其他类似的东西。那么,任何人都可以提供关于使用libclang API 处理宏定义的好教程吗?
【问题讨论】:
-
不幸的是,在 Stack-Overflow 上询问工具/书籍/等是题外话。一个简单的技巧是将问题改写为只问“如何”而不是指定您正在寻找工具......毕竟可能有一种无需工具的方式。
-
在 C 中,一般答案是“否”。这是因为文字被视为常量表达式,而带有
const限定符的变量则不是。在 C 中有些上下文需要常量表达式(例如,静态变量的初始化程序)。所以这个改变可能会破坏程序。
标签: c rust c-preprocessor