我正在尝试在Rust中使用C常量。这是C代码的一部分:
#define INT_CANCEL 2
在Go中,我可以这样做:
return C.INT_CANCEL
我如何在Rust中做类似的事情?
我尝试过像
这样的东西#[link(name = "name_of_lib")]
extern {
int INT_CANCEL
}
但那不会编译。
答案 0 :(得分:4)
我不是Gopher,但 Go 也不了解C #define
。相反,cgo does(至少some subsets of them)。
最好也是最简单的选择是将值复制到程序中。请注意,必须定义尺寸:
const INT_CANCEL: u8 = 2;
如果你真的需要等待在运行时决定类型,你也可以创建一个宏,但这并不常见。
您还可以创建包含标题的a build script compiles some C code并打印出相应的Rust代码:
#include <stdio.h>
#include "myheader.h"
int main(int argc, char *argv[]) {
printf("const INT_CANCEL: u8 = %d;\n", INT_CANCEL);
return 0;
}
然后可以将Rust代码包含回项目中。
您也可以尝试修改rust-bindgen,以便执行与cgo类似的操作并尝试自动创建这些常量。