面试题答案
一键面试编译器对变量未使用情况的检测逻辑
- 变量
a
:- 编译器会扫描代码块,对于
a
,它在main
函数的后续代码中没有被使用。Rust 编译器默认会对未使用的变量发出警告,提示开发者该变量声明后未被使用,可能是多余的代码。
- 编译器会扫描代码块,对于
- 变量
b
:b
被声明在内部代码块中,并且在该代码块内没有被使用。编译器同样会检测到这种情况并发出未使用变量的警告。即使该代码块结束后,b
超出作用域,编译器在扫描该代码块时发现其未使用,依然会警告。
- 变量
c
:- 同
a
和b
,如果在c
声明之后的代码中没有使用c
,编译器会检测到并发出未使用变量的警告。
- 同
避免对 b
的未使用警告且保持代码结构不变的做法
- 使用
std::mem::drop
:- 在
b
声明后,可以使用std::mem::drop
来明确表示对b
的“使用”。虽然实际上没有对b
的值进行实际的操作,但这会让编译器认为b
被使用了。
fn main() { let a = 10; { let b = 20; std::mem::drop(b); } let c = 30; }
- 在
- 添加注释
#[allow(unused_variables)]
:- 在
b
声明的上方添加#[allow(unused_variables)]
注释,这样可以抑制对b
的未使用变量警告。
fn main() { let a = 10; { #[allow(unused_variables)] let b = 20; } let c = 30; }
- 在