1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-04-24 16:42:36 +02:00
comprehensive-rust/src/unsafe/extern-functions.md
2023-01-27 17:17:37 +00:00

29 lines
722 B
Markdown

# Calling External Code
Functions from other languages might violate the guarantees of Rust. Calling
them is thus unsafe:
```rust,editable
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));
}
}
```
<details>
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](https://doc.rust-lang.org/reference/items/external-blocks.html).
</details>