如何在Rust中访问C常量?

时间:2016-11-23 17:59:15

标签: c rust

我正在尝试在Rust中使用C常量。这是C代码的一部分:

#define INT_CANCEL 2

在Go中,我可以这样做:

return C.INT_CANCEL

我如何在Rust中做类似的事情?

我尝试过像

这样的东西
#[link(name = "name_of_lib")]
extern {
    int INT_CANCEL
}

但那不会编译。

1 个答案:

答案 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类似的操作并尝试自动创建这些常量。