【问题标题】:How do I access a C constant in Rust?如何在 Rust 中访问 C 常量?
【发布时间】:2017-04-07 20:50:16
【问题描述】:

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

#define INT_CANCEL 2

在 Go 中,我可以这样做:

return C.INT_CANCEL

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

我尝试过类似的东西

#[link(name = "name_of_lib")]
extern {
    int INT_CANCEL
}

但这不会编译。

【问题讨论】:

标签: c rust


【解决方案1】:

我不是 Gopher,但 Go 也不懂 C #defines。取而代之的是cgo does(至少some subsets of them)。

最好和最简单的选择是将值复制到您的程序中。请注意,您必须定义尺寸

const INT_CANCEL: u8 = 2;

如果您确实需要能够等待在运行时确定类型,您也可以创建一个宏,但这并不常见。

您还可以创建 a build scriptcompiles 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 的操作并尝试自动创建这些常量。

【讨论】:

  • 感谢您的回答。 “最好和最简单的选择是将值复制到您的程序中。”我就是这么想的,我想确保我没有遗漏任何东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2019-05-10
  • 2013-06-11
  • 1970-01-01
相关资源
最近更新 更多