当前位置: 首页 > news >正文

【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() {}

访问联合体中的字段

相关文章:

  • Ex-Human:在DigitalOcean云平台之上,构建下一代 AI 数字人
  • linux命令六
  • 操作系统 3.3-多级页表和快表
  • DEBUG问题-静态变量初始化顺序
  • 通俗理解CLIP模型如何实现图搜图乃至文搜图
  • 文件IO6(开机动画的显示原理/触摸屏的原理与应用)
  • JVM常见问题与调优
  • 黄冈未来:科技自然共生画卷
  • const关键字理解
  • vscode头文件自由跳转
  • leetcode590 N叉树的后序遍历
  • 【Origin】画双坐标轴的条形图
  • 通过MCP+数据库实现AI检索和分析
  • 大模型在慢性髓细胞白血病(CML)初治成人患者诊疗中的应用研究
  • 2025年智能合约玩法创新白皮书:九大核心模块与收益模型重构Web3经济范式
  • 爬虫解决debbugger之替换文件
  • Hydra Columnar:一个开源的PostgreSQL列式存储引擎
  • 解析Java根基:Object类核心方法
  • 配置镜像端口和观察接口
  • 微信小程序开发:微信小程序上线发布与后续维护
  • 番禺网站建设培训/附子seo
  • cms建站模板app/windows优化大师有哪些功能
  • 合肥网站网站建设/今日关键词
  • 重庆宣传网站怎么做/外包网络推广营销
  • 美国芯片设计公司/深圳网站优化哪家好
  • 个人优秀网站欣赏/公司宣传网页怎么做