// afficher la variable en débug #[derive(Debug)] // oblige la représentation machine au format "C ANSI" #[repr(C)] // son nom importe peu, et peut être différent du C struct QuelqueChose { i: u32 } // liaison vers le nom de la cdylib (hors extension et préfixe) #[link(name="doubler")] // indication que la fonction n'est pas au sein du code Rust du projet extern { // définition de la signature : passage par valeur fn doubler_alt( x: QuelqueChose ) -> QuelqueChose; // ici, passage par "référence" fn tripler_alt( x: *mut QuelqueChose ); } // une structure unitaire commentée, tout à fait inutile, mais c'est pour l'exemple // struct Bidule; fn main() { let mut i: QuelqueChose = QuelqueChose { i: 1 }; // bloc "unsafe" car le code ne provient pas de Rust (cf. notion d'emprunt et de possession) unsafe { println!("{:?} x 3 = ?", i ); tripler_alt( &mut i ); // le problème se situe au niveau de la macro 'println!' let y = QuelqueChose { i : i.i }; println!("{:?} x 2 = {:?}", y, doubler_alt( i ) ); } }