我想用C常数来表示锈。下面是C代码的一部分:

#define INT_CANCEL 2

在围棋中,我可以这样做:
return C.INT_CANCEL

我该怎么做类似的生锈的事呢?
我试过类似的方法
#[link(name = "name_of_lib")]
extern {
    int INT_CANCEL
}

但那不是编译。

最佳答案

我不是地鼠,但Go也不懂C#defines。相反,cgo does(至少some subsets of them)。
最好也是最简单的选择是将值复制到程序中。请注意,必须定义大小:

const INT_CANCEL: u8 = 2;

如果确实需要等待运行时确定类型,也可以创建宏,但这并不常见。
您还可以创建包含标题的a build script并打印出相应的生锈代码:
#include <stdio.h>
#include "myheader.h"

int main(int argc, char *argv[]) {
  printf("const INT_CANCEL: u8 = %d;\n", INT_CANCEL);

  return 0;
}

然后可以将该Rust代码包含回您的项目中。
您也可以尝试修改compiles some C code以便执行类似于cgo的操作,并尝试自动创建这些常量。

关于c - 如何在Rust中访问C常量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40771335/

10-15 06:58