gpt4 book ai didi

rust - 带有多个二进制文件的死代码警告?

转载 作者:行者123 更新时间:2023-12-03 11:24:09 27 4
gpt4 key购买 nike

我注意到,为了使一段代码不被归类为死代码,它必须可以从所有二进制文件中访问。例子:

Cargo.toml:
[[bin]]
name = "main_one"
path = "src/main_one.rs"
[[bin]]
name = "main_two"
path = "src/main_two.rs"

main_one.rs:
mod utils;
fn main() {
print!("Hello, ");
utils::function_in_question();
}


main_two.rs:
mod utils;
fn main() {
print!("Hello, ");
// utils::function_in_question();
}


utils.rs:
pub fn function_in_question() {
println!("world!");
}
此报告 function_in_question作为死代码,即使它可以从 main_one.rs 访问.取消注释它可以解决此问题。如果它仅存在于 main_two.rs 中也可以使用.
尽管这种行为背后有一些理由,但让 VSCode 一直提示这一点是令人讨厌的 + Clippy 的输出被这些警告发送了垃圾邮件。有没有一种解决方案可以至少在全局范围内抑制死代码检测?应避免使用 cargo 工作空间重组整个项目。

最佳答案

发生这种情况是因为您没有编译 utils.rs一次——你编译了两次,第一次是 main_one 的一部分然后作为 main_two 的一部分.
我熟悉的模式是将常用项放入lib.rs ,默认情况下会编译到与您的项目同名的库 crate 中。然后,而不是将它们包含在每个二进制文件中 mod ,只需使用库箱。

# Cargo.toml
[package]
name = "my_crate" # <- will be the name of the library crate
version = "0.1.0"

[dependencies]

# No need for [[bin]] sections if you put the binary sources in src/bin
// src/lib.rs
pub fn function_in_question() {
println!("world!");
}
// src/bin/main_one.rs
fn main() {
print!("Hello, ");
my_crate::function_in_question();
}
// src/bin/main_two.rs
fn main() {
print!("Hello, ");
// my_crate::function_in_question();
}
库 crate 只会编译一次,因为 function_in_question是 crate 的公共(public) API 的一部分,您将不会看到死代码警告。
请注意,您不需要 [[bin]] Cargo.toml 中的部分如果你把二进制文件放在 src/bin ;见 this question更多。

关于rust - 带有多个二进制文件的死代码警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66195852/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com