Jer*_*oen 23 program-entry-point return rust
在Rust中,main函数定义如下:
fn main() {
}
Run Code Online (Sandbox Code Playgroud)
但是,此函数不允许返回值.为什么一种语言不允许返回值,是否有办法返回一些东西?我是否能够安全地使用C exit(int)功能,否则会导致泄漏等等?
tim*_*lyo 15
std::process::exit(code: i32) 是用代码退出的方法.
Rust以这种方式做到这一点,因此有一个一致的显式接口,用于从程序中返回一个值,无论它在何处设置.如果main启动一系列任务,则其中任何一个都可以设置返回值,即使main已退出.
Rust确实有一种编写main返回值的函数的方法,但它通常在stdlib中抽象.有关详细信息,请参阅有关编写不带stdlib的可执行文件的文档.
0 0*_*0 0 14
从Rust 1.26开始,main可以返回Result:
use std::fs::File;
fn main() -> Result<(), std::io::Error> {
let f = File::open("bar.txt")?;
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下返回的错误代码在发生错误时为1.与File::open("bar.txt").expect("file not found");代替,则返回(至少我的机器上)的101的误差值.
此外,如果要返回更一般的错误,请使用:
use std::error::Error;
...
fn main() -> Result<(), Box<dyn Error>> {
...
}
Run Code Online (Sandbox Code Playgroud)
尝试:
use std::process::ExitCode;
fn main() -> ExitCode {
ExitCode::from(2)
}
Run Code Online (Sandbox Code Playgroud)
或者:
use std::process::{ExitCode, Termination};
pub enum LinuxExitCode { E_OK, E_ERR(u8) }
impl Termination for LinuxExitCode {
fn report(self) -> ExitCode {
match self {
LinuxExitCode::E_OK => ExitCode::SUCCESS,
LinuxExitCode::E_ERR(v) => ExitCode::from(v)
}
}
}
fn main() -> LinuxExitCode {
LinuxExitCode::E_ERR(3)
}
Run Code Online (Sandbox Code Playgroud)