有没有办法在Rust 1.0中返回退出代码?
我已尝试env::set_exit_status(exit_code);
,但这会产生编译错误。
还有一个问题:Exit Rust program early这个问题很相似,但询问过程必须提前退出的情况。
编辑:我正在寻找一个解决方案,它也可以让进程整理堆栈,调用析构函数等。
答案 0 :(得分:36)
建立@FrancisGagné 's answer的评论,如果您正在搜索相应的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()
函数的范围内,并且您可以在return exit_code;
中安全地使用main
,同时仍然可以正确运行所有析构函数。
使用std::env::set_exit_status(..)
更合适,但此函数还没有稳定的Rust。
答案 1 :(得分:10)
std::process::exit
使用指定的退出代码退出程序。
答案 2 :(得分:3)
从Rust 1.26开始,main
函数不再局限于()
:main
还可以返回任何类型Result<(), E>
的{{1}}。 E: Debug
值映射到Ok
(在所有平台上恰好为0),而EXIT_SUCCESS
值映射到Err
(在所有平台上恰好为1)。错误值也会自动打印到标准错误流中。
将来,Rust将支持EXIT_FAILURE
的更多返回类型。 Termination
特征(从Rust 1.31.1开始是不稳定的)定义了所有这些类型。 trait的工作是将值转换为main
退出代码。当i32
稳定下来后,应用程序自然可以自行实现该特征以提供自己的结果类型。