如何使用带有 #[cfg(...)] 属性的变量?

问题描述 投票:0回答:1

我想仅在调试模式下使用一些代码来进行断言。我现在有这样的事情:

#[cfg(debug_assertions)]
let mut thing_initialized = false;

for ... {
    if cfg!(debug_assertions) {
        if expensive_check() { thing_initialized = true; }
    }
}

if cfg!(debug_assertions) {
    assert(thing_initialized);
}

但是当 cfg 为

false
时,我在所有行上都会出现此错误
thing_initialized
用于:

error[E0425]: cannot find value `thing_initialized` in this scope

解决这个问题的正确方法是什么?我可能可以编写一个 proc 宏并有条件地从中生成表达式,但似乎有点矫枉过正。有标准的 Rust 方法来实现这一点吗?或者已经有一个可以执行 proc-macro 功能的通用库?

rust conditional-compilation
1个回答
0
投票

不用下面的

if cfg!(debug_assertions)
,只需在块上使用
#[cfg]

#[cfg(debug_assertions)]
let mut thing_initialized = false;

for ... {
    #[cfg(debug_assertions)]
    {
        if expensive_check() { thing_initialized = true; }
    }
}

#[cfg(debug_assertions)]
{
    assert(thing_initialized);
}
© www.soinside.com 2019 - 2024. All rights reserved.