如何在Rust中为单个语句安静警告?

ide*_*n42 13 warnings rust

假设有一个警告,例如path_statements,unused_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
Run Code Online (Sandbox Code Playgroud)

Rust具有相同的功能吗?


请注意,我正在询问如何安静警告的一般情况.我知道有办法解决未使用的var警告,例如.

Luk*_*odt 20

要使警告静音,您必须allow(warning_type)属性添加到受影响的表达式或其任何父项.如果你只是想沉默的一个具体体现警告,您可以添加属性到表达/语句:

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

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

    println!("hi!");
}
Run Code Online (Sandbox Code Playgroud)

但是,向语句/表达式添加属性(与项目相反,如函数)的功能仍然有点破碎.特别是,在上面的代码中,该std::io::stdin行仍然会触发警告.您可以在此处阅读有关此功能的持续讨论.


通常,没有必要使用属性.通过使用语句的左侧可以使许多警告(例如unused_variablesunused_must_use)静音.通常,以下划线开头的任何变量都不会触发未使用的警告.let _ =


lje*_*drz 6

如果您想使模块中的所有警告静音#![allow(dead_code)],请在模块顶部写上 eg (注意感叹号)。这将禁用整个模块中的所有此类警告。您也可以rustc使用 eg调用-A dead_code

您可以通过#![allow(warnings)]在模块顶部写入来禁用所有警告。

您可以mod在忽略特定警告的地方插入一个ule(如Rust 书中所述)。

正如 Lukas 所说,您也可以#[allow(dead_code)]在例如语句或表达式上书写。