rust - 有没有一种方法可以基于常量的存在进行条件编译?

标签 rust conditional-compilation

libc库定义了许多常量,这些常量可以作为标志传递给open(),例如O_APPENDO_CREAT等。其中某些标志仅针对某些OS目标定义。如果有一种方法可以在我的代码中自由使用O_WHATEVER而不用担心它实际上是否在libc中定义,那就太好了:

#[cfg(???)]
const O_WHATEVER = libc::O_WHATEVER;
#[cfg(not(???))]
const O_WHATEVER = 0;

如果上面的示例中的???是某种is_defined(libc::O_WHATEVER),那就太好了。否则,我需要弄清楚所有在libc中定义了O_WHATEVER的操作系统组合,这确实是很痛苦的。

最佳答案

不支持Rust 1.41。 RFC 2523 — cfg_version and cfg_accessible 引入了:

#[cfg(accessible(libc::O_WHATEVER))]
const O_WHATEVER = libc::O_WHATEVER;

关于rust - 有没有一种方法可以基于常量的存在进行条件编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60636940/

相关文章:

rust - Windows 上的 Rust 程序的用户是否仍需要安装 Visual Studio C++ 构建工具?

rust - 为什么 impl trait 不能用于返回多个/条件类型?

input - 如何在 Rust 1.0 中读取用户输入的整数?

visual-studio - Visual Studio - 如何避免在每次构建时编译所有项目文件?

使用子句中的 Delphi 条件编译

rust - 结构的生命周期边界如何在 Rust 中工作?

java - 在不丢失编译时检查的情况下在 Eclipse 中构建多 SDK Android 应用程序

java - #ifdef 等同于 Java?

wix - 为什么我的 ifndef 部分不起作用?

ffi - 在 FFI 中使用 c_void