03.04 Rust 編程視頻教程(進階)——025

視頻地址

頭條地址:https://www.ixigua.com/i6775861706447913485

源碼地址

github地址:見擴展鏈接。

講解內容

(1)調用方式。不安全函數和方法與常規函數方法十分類似,除了其開頭有一個額外的 unsafe。例子1:

<code>unsafe fn dangerous() {
println!("Do some dangerous thing");
}
fn main() {
unsafe {
dangerous();
}
println!("Hello, world!");
}/<code>

(2)創建不安全代碼的安全抽象

<code>fn foo() {
let mut num = 5;
let r1 = &num as *const i32;
let r2 = &mut num as *mut i32;
unsafe {
println!("r1 is: {}", *r1);
println!("r2 is: {}", *r2);
}
}
fn main() {
foo();
}/<code>

(3)使用extern函數調用外部代碼extern關鍵字,有助於創建和使用 外部函數接口(Foreign Function Interface, FFI)。例子1:調用c語言函數

<code>extern "C" {
fn abs(input: i32) -> i32;
}

fn main() {
unsafe {
println!("abs(-3): {}", abs(-3));
}
}/<code>

例子2:c語言調用rust語言(a)cargo new foo –lib(b)vim src/lib.rs編寫代碼:

<code>#![crate_type = "staticlib"]
#[no_mangle]
pub extern fn foo(){
println!("use rust");
}/<code>

編寫cargo.toml

<code>[lib]
name = "foo"
crate-type = ["staticlib"]/<code>

(c)編譯後生成 libfoo.a的靜態庫(d)編寫c語言的代碼:

<code>//main.c
#include <stdint.h>
#include <stdio.h>
extern void foo();
int main() {
foo();
return 0;
}/<stdio.h>/<stdint.h>/<code>

(e)編譯運行:gcc -o main main.c libfoo.a -lpthread -ldl


分享到:


相關文章: