unsafe Rust 简介
unsafe 块/函数、解引用原始指针、调用 FFI、实现 unsafe trait
unsafe Rust 简介
Rust 的"安全"是默认的——unsafe 让你暂时跳出安全检查,做"我知道我在做什么"的事。FFI、裸指针、内联汇编都需要 unsafe。
学完本章你将: 掌握 unsafe 块/函数、解引用原始指针、FFI 调用。
unsafe 能做什么
rust
fn main() {
// unsafe 块——你在告诉编译器:"我来保证安全"
unsafe {
// 1. 解引用裸指针
let mut num = 5;
let r1 = &num as *const i32; // 裸指针
let r2 = &mut num as *mut i32;
*r2 = 10;
println!("{}", *r1); // 10
// 2. 调用 unsafe 函数
dangerous();
}
}
unsafe fn dangerous() {
// 这个函数只能在 unsafe 块中调用
}
调用 C 代码(FFI)
rust
// 声明外部函数
extern "C" {
fn abs(input: i32) -> i32;
}
fn main() {
unsafe {
println!("|-3| = {}", abs(-3));
}
}
// 也可以导出 Rust 函数给 C 调用
#[no_mangle]
pub extern "C" fn call_from_c() {
println!("从 C 调用 Rust!");
}
unsafe 的黄金法则
rust
// ✅ unsafe 应该尽量小——只包裹真正不安全的操作
// ✅ 在 unsafe 外提供安全接口
// ✅ 用 // SAFETY: 注释解释为什么是安全的
// ❌ 不要把所有代码都放进 unsafe
// ❌ 不要裸用 unsafe 而不封装