Interoperability with C

Rust has full support for linking object files with a C calling convention. Similarly, you can export Rust functions and call them from C.

You can do it by hand if you want:

  1. extern "C" {
  2. fn abs(x: i32) -> i32;
  3. }
  4. fn main() {
  5. let x = -42;
  6. let abs_x = unsafe { abs(x) };
  7. println!("{x}, {abs_x}");
  8. }

We already saw this in the Safe FFI Wrapper exercise.

This assumes full knowledge of the target platform. Not recommended for production.

We will look at better options next.