假设有一个警告,例如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
Rust是否具有相同的功能?
注意,我正在询问如何安静警告的一般情况。 我知道有办法解决未使用的var警告,例如。
答案 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_variables
和unused_must_use
)可以通过使用let _ =
作为语句的左侧来消除。通常,任何以下划线开头的变量都不会触发未使用的警告。
答案 1 :(得分:3)
如果您想要隐藏模块中某种类型的警告,请写下#![allow(dead_code)]
(请注意感叹号)位于模块顶部。这将禁用整个模块中的所有此类警告。您也可以通过以下方式致电rustc
-A dead_code
。
您可以通过在模块顶部写下#![allow(warnings)]
来禁用所有警告。
您可以插入mod
ule(如Rust book中所述)忽略特定警告的位置。
正如卢卡斯所说,你也可以写作,例如#[allow(dead_code)]
关于陈述或表达。