欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 【14】RUST高级特性

【14】RUST高级特性

2025/4/16 5:54:03 来源:https://blog.csdn.net/qq_45401419/article/details/147143416  浏览:    关键词:【14】RUST高级特性

文章目录

  • 不安全操作
    • 裸指针
      • 应用
    • 不安全函数or方法
    • `extern`调用外部函数
      • 调用C语言函数
      • 创建供C调用的接口
    • 全局变量(静态变量)
    • 不安全的trait
    • 访问联合体中的字段

不安全操作

裸指针

需要程序员保证有效性
从引用创建

let mut num = 5;
let r1 = &num as *const i32;
let r2 = &mut num as *mut i32;

应用

调用C接口

不安全函数or方法

调用也需要在unsafe{}代码块之中,
但是这个不安全调用只需要包装一层unsafe{}即可

fn main() {unsafe fn dangerous() {}unsafe {dangerous();}
}

extern调用外部函数

extern中声明函数默认是不安全的

调用C语言函数

extern "C" {fn abs(input: i32) -> i32;
}fn main() {unsafe {println!("Absolute value of -3 according to C: {}", abs(-3));}
}

创建供C调用的接口

#[no_mangle]告诉编译器不需要修改函数名称。这里extern的是安全的。

#[no_mangle]
pub extern "C" fn call_from_c() {println!("Just called a Rust function from C!");
}

全局变量(静态变量)

rust中的全局变量使用static标识,有着固定内存地址,可以是mut的,通常使用SCREAMING_SNAKE_CASE命名规则。读写mut的可变静态变量是不安全操作,需要放在unsafe{}内部。

static mut COUNTER: u32 = 0;fn add_to_count(inc: u32) {unsafe {COUNTER += inc;}
}fn main() {add_to_count(3);unsafe {println!("COUNTER: {COUNTER}");}
}

不安全的trait

unsafe trait Foo {
// methods go here
}
unsafe impl Foo for i32 {
// method implementations go here
}
fn main() {}

访问联合体中的字段

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词