如何使用退出代码干净地结束程序?

How to cleanly end the program with an exit code?

有没有办法在 Rust 1.0 中返回退出代码?

我试过 env::set_exit_status(exit_code); 但这会产生编译错误。

还有这个问题:Exit Rust program early这个问题很相似,但是问的是进程必须提前退出的情况。


编辑:我正在寻找一种解决方案,该解决方案还允许进程整理堆栈、调用析构函数等。

std::process::exit 使用指定的退出代码退出程序。

建立在 的评论之上,如果您正在搜索 C 的 return exit_code 的等价物,您可以这样人为地建立它:

fn main() {
    let exit_code = real_main();
    std::process::exit(exit_code);
}

fn real_main() -> i32 {
    // the real program here
}

这样,您程序的所有对象都将在 real_main() 函数的范围内,并且您可以安全地在 main 中使用 return exit_code;,同时仍然正确地拥有所有析构函数运行.

从Rust 1.26开始,main函数不再局限于()main也可以return一个Result<(), E>对于任何类型E: DebugOk 值映射到 EXIT_SUCCESS(在所有平台上恰好为 0),Err 值映射到 EXIT_FAILURE(在所有平台上恰好为 1)。错误值也会自动打印到标准错误流。

将来,Rust 将支持 main 的更多 return 类型。 Termination 特征(自 Rust 1.31.1 起不稳定)定义了所有这些类型。特征的工作是将值转换为 i32 退出代码。当 Termination 稳定后,应用程序自然可以自己实现该特性以提供自己的结果类型。