Richiamare funzioni C in Rust
Anche se Rust sta prendendo molto piede, e addirittura si parla di includerlo nel kernel Linux, C rimane ancora il linguaggio predominante nell'ambito della programmazione di sistema (e non solo).
In questo articolo vediamo un esempio basico di come richiamare una funzione C direttamente da Rust.
Dico basico perchè parliamo di funzioni semplici, che ad esempio non richiedono puntatori.
In questo secondo caso la situazione si complica, e non sarà oggetto dell'articolo.
Detto ciò, vediamo come fare:
use std::os::raw::c_int;
use std::os::raw::c_double;
extern "C" {
fn abs(num: c_int) -> c_int;
fn sqrt(num: c_double) -> c_double;
fn pow(num: c_double, power: c_double) -> c_double;
}
fn main() {
let x: i32 = -2;
let n: f64 = 2.0;
let p: f64 = 3.0;
let y: f64 = 64.0;
let z = -3.14;
println!("Valore assoluto {x}: {}.", unsafe { abs(x) });
println!("{n} elevato alla {p}: {}.", unsafe { pow(n, p) });
println!("La radice quadrata di {y} è: {}.", unsafe { sqrt(y) });
println!("La radice quadrata di {z} è: {}.", unsafe { sqrt(z) });
}
Abbiamo richiamato solo funzioni matematiche, e le abbiamo usate in maniera praticamente "diretta".
Enjoy!
rust c pow abs sqrt
Commentami!