我试图使用条件编译语句。除了定义应该只存在于调试版本中的函数之外,我还想定义一组仅存在于调试版本中的变量/常量/类型。
#[cfg(debug)]
pub type A = B;
pub type B = W;
#[cfg(other_option)]
pub type A = Z;
pub type B = I;
let test = 23i32;
实际上有多少行"涵盖"在这种情况下由条件编译属性?它只是一个(在这种情况下我会期待什么)?有没有办法确保条件涵盖整个代码块(包括变量,类型和两个函数)?
答案 0 :(得分:4)
答案 1 :(得分:4)
您可以使用模块将调试/发布应存在的所有内容组合在一起,如下所示:
#[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)
值,因为即使在调试模式下,操场也无法定义debug
功能。
如果定义了debug
,则会打印2147483647
(i32
的最大值),否则会打印4294967295
(u32
的最大值1}})。请记住,两个模块必须具有每个项目的定义,否则您将遇到编译时错误。
如果您还没有阅读Attributes,那么这样做可能是个好主意;确保你知道内部属性(#![attribute]
)和外部属性(#[attribute]
)之间的区别。