gpt4 book ai didi

rust - 你如何在 rust 中为 'everything else' 设置默认的#[cfg] 目标?

转载 作者:行者123 更新时间:2023-11-29 07:54:00 27 4
gpt4 key购买 nike

#[cfg] 助手非常晦涩,也没有特别详细的文档记录,但是通过深入研究 librustc,我得到了一个非常合理的列表,其中包含所有可用的配置目标(target_os、target_family、target_arch、target_endian、target_word_size、windows , unix), 当然你可以使用 not(..) 来指定组合。

但是,我不知道如何进行“默认”实现。

有什么方法可以使用 cfg 做到这一点吗?

#[cfg(???)] <--- What goes here?
fn thing {
panic!("Not implemented! Please file a bug at http://... to request support for your platform")
}

#[cfg(target_os = "mac_os"]
fn thing() {
// mac impl
}

#[cfg(target_os = "windows"]]
fn thing() {
// windows impl
}

我看到标准库有一些:

#[cfg(not(any(target_os = "macos", target_os = "ios", windows)]

其中涉及大量繁琐的复制和粘贴。只有这样吗?

( panic 很糟糕,对吧?不要那样做?这是针对 build.rs 脚本的,您应该并且必须 panic 以将错误提高到 cargo )

最佳答案

Which involves a lot of tedious copy and paste. Is that the only way?

从条件编译的文档和 RFC 来看,是的,这是唯一的方法。如果有办法指定:

#[cfg(other)]
fn thing {

这会增加解析 cfg 属性的复杂性,因为编译器需要知道 thing 只有在 mac_oswindows 未定义。

另外,这个怎么样:

#[cfg(other)]
fn thing_some_other {
panic!("Not implemented! Please file a bug at http://... to request support for your platform")
}

#[cfg(target_os = "mac_os"]
fn thing() {
// mac impl
}

#[cfg(target_os = "windows"]]
fn thing() {
// windows impl
}

换句话说,它们需要捆绑在一起,类似于 C 的:

#ifdef WINDOWS
// ...
#elif LINUX
// ...
#else
// ...
#endif

关于rust - 你如何在 rust 中为 'everything else' 设置默认的#[cfg] 目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27418505/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com