我正在Rust写一个程序,我有一些测试。我为这些测试编写了一个辅助函数,但每当我使用cargo build
构建时,它都警告我该函数从未使用过:
警告:从不使用函数:...默认打开#[warn(dead_code)]
如何将此功能标记为使用以便不收到警告?
答案 0 :(得分:22)
如何将此功能标记为使用以便不收到警告?
Rust编译器会运行许多lints来警告您代码中可能存在的问题,而dead_code
lint就是其中之一。在代码完成时指出错误非常有用,但在早期阶段也可能是麻烦。但是,可以通过allow
关闭所有lints,并且您的错误消息(#[warn(dead_code)] on by default
)包含您可以禁用的lint的名称。
#[allow(dead_code)]
fn my_unused_function() {}
我为这些测试编写了一个辅助函数,但每当我使用
cargo build
构建时,它都会警告我该函数从未使用过。
这恰好是一种特殊情况,即真实可执行文件中不需要仅用于测试的代码,并且可能不应包括在内。
为了有选择地禁用编译测试代码,您可以使用cfg
attribute test
配置文件对其进行相应的标记。
#[cfg(test)]
fn my_test_specific_function() {}
以这种方式标记时,编译器知道在编译期间忽略该方法。这类似于其他语言(如C或C ++)中常用的ifdef
用法,除非定义了TESTING
,否则您要告诉预处理器忽略所附的代码。
#ifdef TESTING
...
#endif
答案 1 :(得分:8)
如果某些内容仅用于测试,则应完全省略。这可以使用#[cfg(test)]
属性完成。
答案 2 :(得分:5)
dead_code
是一个lint,这意味着你可以allow
使它触发它。
#[allow(dead_code)]
fn dummy() {}
fn main() {}
答案 3 :(得分:1)
对于在制作 rust 库时收到此警告的人,如果您没有在 lib.rs 中将模块设置为 pub,您可能会收到此警告。
pub mod foo;
答案 4 :(得分:0)
还有另一种情况会发生这种情况。如果您在一个模块中有多个辅助函数,例如在 tests/utils/mod.rs
中,然后是几个集成测试(tests/a.rs
、tests/b.rs
),每个都可以
mod utils;
use utils::...;
如果您没有使用所有测试中的所有代码,您将收到死代码警告。例如,如果测试 a.rs
仅使用 utils::foo
而 b.rs
仅使用 utils::bar
,那么您将收到两者的死代码警告。
那是因为每个测试都被编译为一个独立的 crate。 Here is the bug report for it. 看起来很难解决,所以我不会屏住呼吸。
答案 5 :(得分:0)
在未使用的函数名前加一个下划线:
fn _dummy() {}
fn main() {}
见:https://doc.rust-lang.org/rustc/lints/listing/warn-by-default.html#dead-code