gpt4 book ai didi

rust - Rust 条件编译属性覆盖了多少行?

转载 作者:行者123 更新时间:2023-11-29 07:56:42 28 4
gpt4 key购买 nike

我正在尝试使用条件编译语句。除了定义一个应该只存在于调试版本中的函数之外,我还想定义一组只存在于调试版本中的变量/常量/类型。

#[cfg(debug)]
pub type A = B;
pub type B = W;

#[cfg(other_option)]
pub type A = Z;
pub type B = I;
let test = 23i32;

在这种情况下,条件编译属性实际上“覆盖”了多少行?它只有一个(我在这种情况下所期望的)吗?有没有办法确保整个代码块(包括变量、类型和两个函数)都被条件覆盖?

最佳答案

您可以使用模块将所有应该存在的仅用于调试/发布的内容组合在一起,如下所示:

#[cfg(debug)]
mod example {
pub type A = i32;
pub type B = i64;
}

#[cfg(not(debug))]
mod example {
pub type A = u32;
pub type B = u64;
}

fn main() {
let x: example::A = example::A::max_value();
println!("{}", x);
}

Playground link (请注意,这将始终打印 not(debug) 值,因为 playground 没有定义 debug 功能,即使在 Debug模式下也是如此)。

如果定义了debug,这将打印2147483647(i32的最大值),否则将打印4294967295 (u32 的最大值)。请记住,两个模块都必须对每个项目都有定义,否则您会遇到编译时错误。

如果您还没有阅读 Attributes ,这样做可能是个好主意;确保您知道内部属性 (#![attribute]) 和外部属性 (#[attribute]) 之间的区别。

关于rust - Rust 条件编译属性覆盖了多少行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39291850/

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