调用外部代码

基于其他语言的函数可能会违反 Rust 的保证。因此, 调用这类函数是不安全的:

extern "C" {
    fn abs(input: i32) -> i32;
}

fn main() {
    unsafe {
        // Undefined behavior if abs misbehaves.
        println!("Absolute value of -3 according to C: {}", abs(-3));
    }
}

这个问题通常仅存在于使用指针执行违反 Rust 内存模型的操作的外部函数中。 但一般而言,任何 C 函数都有可能在任意情况下出现未定义行为。

本例中的“C”是 ABI;也可以使用其他 ABI