我正在包装一个可以失败的malloc
的C库。 Rust的其余部分在OOM上中止,所以我也想这样做。有std::intrinsics::abort()
和core::intrinsics::abort()
(差异是什么?)但它们都不稳定。
如何使用稳定的Rust中止()?
答案 0 :(得分:3)
您可以致电panic!()
。
但是,如果您可以拦截失败的分配,并以稳定的程序状态返回Rust,我认为最好报告错误(使用Result
等)。
答案 1 :(得分:2)
因为Rust代码通常与定义了abort
的C运行时库链接,所以您可以使用extern
块导入该函数:
extern {
fn abort();
}
fn main() {
unsafe { abort(); }
}
请注意,这实际上与abort
内在函数不同:abort()
函数引发SIGABRT
,而内在函数生成无效指令(ud2
),导致{SIGILL
1}}。
希望std::process::abort
将来会稳定下来。
答案 2 :(得分:2)
从Rust 1.17.0开始,您可以致电std::process::abort()
。