【发布时间】:2019-07-07 23:09:27
【问题描述】:
我知道 Rust 中的 libc crate 包含许多用于 Rust 的 C 标准宏和函数,但它也声明它不关心系统之间的可移植性。我正在将一些使用 C 的预处理器宏的代码从 C 移植到 Rust,并且仅在定义了给定宏时才包含一些代码:在这种情况下为 O_BINARY。是否可以检查我的系统上是否在 Rust 中定义了 O_BINARY 宏,如果是,这是什么样的?
我正在寻找一种可以相当接近地复制这种 C 语法的结构:
#ifdef O_BINARY
// Some extra code here
#endif
// Regular code
【问题讨论】:
-
你可以在编译之前通过 C 预处理器运行你的 Rust 代码。这基本上是 Haskell 开发人员在需要 C 风格预处理时所做的。无论您使用什么 C 编译器,肯定都有一个设置来只是运行预处理器。
-
@SilvioMayolo 无法正常工作。像
#[derive(Debug)] struct Foo;这样简单的东西会使用cpp (GCC) 8.3.0给a.rs:1:2: error: invalid preprocessing directive #[。 -
你看过 rust-bindgen 吗?