我在我的一个程序中使用了#[tokio::main]
宏。在导入main
并未经修饰地使用它后,我遇到了一个意外的错误。
use tokio::main;
#[main]
async fn main() {}
error[E0659]: `main` is ambiguous
--> src/main.rs:3:3
|
3 | #[main]
| ^^^^ ambiguous name
|
= note: ambiguous because of a name conflict with a builtin attribute
= note: `main` could refer to a built-in attribute
我一直在查阅文档,但是我找不到任何关于内置的
#[main]
属性的描述。Rust参考手册包含内置属性的索引。该索引不包括#[main]
,但它包括一个名为#[no_main]
的属性。我搜索了
rustlang/rust
代码库,并找到一些相关的代码,但它似乎使用了一对名为#[start]
和#[rustc_main]
的宏,没有提及#[main]
本身。(这两个宏似乎都不能在稳定版中使用,#[start]
会发出一个错误,表示它是不稳定的,而#[rustc_main]
则会发出一个错误,表示它只是编译器内部使用的。)从名称上猜测,它可能是用来标记一个不同的函数作为入口点而不是
main
,但它似乎也不是这样做的:#[main]
fn something_else() {
println!("this does not run");
}
fn main() {
println!("this runs");
}
Rust Analyzer没有太多可提供的功能:
内置的#[main]
属性除了与我的导入冲突外,还有什么作用?