Richiamare funzioni C in Rust

Mattepuffo's logo
Richiamare funzioni C in Rust

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!


Condividi su Facebook

Commentami!