如何使用退出代码干净地结束程序?
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: Debug
。 Ok
值映射到 EXIT_SUCCESS
(在所有平台上恰好为 0),Err
值映射到 EXIT_FAILURE
(在所有平台上恰好为 1)。错误值也会自动打印到标准错误流。
将来,Rust 将支持 main
的更多 return 类型。 Termination
特征(自 Rust 1.31.1 起不稳定)定义了所有这些类型。特征的工作是将值转换为 i32
退出代码。当 Termination
稳定后,应用程序自然可以自己实现该特性以提供自己的结果类型。
有没有办法在 Rust 1.0 中返回退出代码?
我试过 env::set_exit_status(exit_code);
但这会产生编译错误。
还有这个问题:Exit Rust program early这个问题很相似,但是问的是进程必须提前退出的情况。
编辑:我正在寻找一种解决方案,该解决方案还允许进程整理堆栈、调用析构函数等。
std::process::exit
使用指定的退出代码退出程序。
建立在 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: Debug
。 Ok
值映射到 EXIT_SUCCESS
(在所有平台上恰好为 0),Err
值映射到 EXIT_FAILURE
(在所有平台上恰好为 1)。错误值也会自动打印到标准错误流。
将来,Rust 将支持 main
的更多 return 类型。 Termination
特征(自 Rust 1.31.1 起不稳定)定义了所有这些类型。特征的工作是将值转换为 i32
退出代码。当 Termination
稳定后,应用程序自然可以自己实现该特性以提供自己的结果类型。