如何在Rust中禁用未使用的代码警告?


228
struct SemanticDirection;

fn main() {}
warning: struct is never used: `SemanticDirection`
 --> src/main.rs:1:1
  |
1 | struct SemanticDirection;
  | ^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: #[warn(dead_code)] on by default

在发生任何严重的问题时,我都会再次打开这些警告,但是我只是在修补这种语言,这使我感到很不快。

我尝试将#[allow(dead_code)]代码添加到我的代码,但这没有用。

Answers:


350

您可以:

  • allow在结构,模块,函数等上添加属性:

    #[allow(dead_code)]
    struct SemanticDirection;
  • 添加一个板条箱级allow属性;注意!

    #![allow(dead_code)]
  • 传递给rustc

    rustc -A dead_code main.rs
  • cargo通过RUSTFLAGS环境变量使用它:

    RUSTFLAGS="$RUSTFLAGS -A dead_code" cargo build

5
请注意,最后一个将触发所有内容的重新编译。
约瑟夫·加文

RUSTFLAGS是我需要的cargo test。谢谢。
likebike

60

禁用此警告的另一种方法是在标识符前面加上_

struct _UnusedStruct {
    _unused_field: i32,
}

fn main() {
    let _unused_variable = 10;
}

例如,这对于SDL窗口很有用:

let _window = video_subsystem.window("Rust SDL2 demo", 800, 600);

带下划线的前缀不同于使用单独的下划线作为名称的前缀。执行以下操作将立即破坏该窗口,这不太可能是预期的行为。

let _ = video_subsystem.window("Rust SDL2 demo", 800, 600);

“指定下划线会破坏它”的行为似乎很奇怪(尽管我毫不怀疑您是正确的)。您有参考吗?
迈克尔·安德森

4
@MichaelAnderson请参阅“ RAII。您可能希望存在一个变量,以实现其析构函数的副作用,但不要使用它。在此用例中,不能简单地使用_,因为_不是变量绑定且值将在声明的末尾删除。” 来自stackoverflow.com/a/48361729/109618
David J.

9

公开代码也可以停止警告。您还需要将附件mod的公开。

在编写库时,这很有意义:您的代码在内部“未使用”,因为它打算由客户端代码使用。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.