如何消除 Rust 中单个语句的警告?

How to quiet a warning for a single statement in Rust?

假设有一个警告,例如path_statementsunused_variables。有没有办法忽略其中的一个瞬间,而不将它们隔离到代码块或函数中?

要清楚,当代码中有一个警告时。我希望能够仅使该警告安静下来,而不必针对特定警告进行特殊更改。 并且在其他任何地方都没有这种静音警告,甚至稍后在同一功能中也是如此。

使用 GCC 可以按如下方式完成:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wformat"
    /* Isolated region which doesn't raise warnings! */
    this_would_raise_Wformat(args);
#pragma GCC diagnostic pop

Rust 是否具有同等能力?


注意,我问的是如何消除警告的一般情况。 我知道有一些方法可以解决未使用的 var 警告,例如

如果你想在一个模块中消除所有的警告,写例如#![allow(dead_code)](注意感叹号)在模块的顶部。这将在整个模块中禁用所有此类警告。您也可以调用 rustc 例如-A dead_code.

您可以通过在模块顶部写入 [​​=13=] 来禁用所有警告。

您可以在忽略特定警告的地方插入 mod 规则(如 Rust book 中所述)。

正如卢卡斯所说,你也可以写成#[allow(dead_code)] 语句或表达式。

要消除警告,您必须allow(warning_type) 属性 添加到受影响的表达式或其任何父表达式。如果您 想消除对一个特定表达式的警告,您可以将属性添加到该 expression/statement:

fn main() {
    #[allow(unused_variables)]
    let not_used = 27;

    #[allow(path_statements)]
    std::io::stdin;

    println!("hi!");
}

但是,向 statements/expressions 添加属性的功能(与项目相反,如函数)仍然有点损坏。特别是,在上面的代码中,std::io::stdin 行仍然会触发警告。您可以阅读有关此功能的持续讨论 here


虽然通常没有必要使用属性。许多警告(如 unused_variablesunused_must_use)可以通过 使用 let _ = 作为语句的左侧来消除。通常,任何以下划线开头的变量都不会触发未使用警告。