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

时间:2016-09-01 10:43:13

标签: rust warnings

假设有一个警告,例如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警告,例如。

2 个答案:

答案 0 :(得分:16)

要消除警告,您必须allow(warning_type)属性添加到受影响的表达式或其任何父级。如果想要在一个特定表达式上静音警告,则可以将该属性添加到该表达式/语句中:

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

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

    println!("hi!");
}

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

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

答案 1 :(得分:3)

如果您想要隐藏模块中某种类型的警告,请写下#![allow(dead_code)](请注意感叹号)位于模块顶部。这将禁用整个模块中的所有此类警告。您也可以通过以下方式致电rustc -A dead_code

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

您可以插入mod ule(如Rust book中所述)忽略特定警告的位置。

正如卢卡斯所说,你也可以写作,例如#[allow(dead_code)]关于陈述或表达。