mirror of
https://github.com/google/comprehensive-rust.git
synced 2025-03-29 17:10:46 +02:00
722 B
722 B
Calling External Code
Functions from other languages might violate the guarantees of Rust. Calling them is thus unsafe:
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));
}
}
This is usually only a problem for extern functions which do things with pointers which might violate Rust's memory model, but in general any C function might have undefined behaviour under any arbitrary circumstances.
The "C"
in this example is the ABI;
other ABIs are available too.