【14】RUST高级特性

打印 上一主题 下一主题

主题 1878|帖子 1878|积分 5634

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
不安全操纵

裸指针

必要步伐员保证有用性
从引用创建
  1. let mut num = 5;
  2. let r1 = &num as *const i32;
  3. let r2 = &mut num as *mut i32;
复制代码
应用

调用C接口
不安全函数or方法

调用也必要在unsafe{}代码块之中,
但是这个不安全调用只必要包装一层unsafe{}即可
  1. fn main() {
  2.         unsafe fn dangerous() {}
  3.        
  4.         unsafe {
  5.                 dangerous();
  6.         }
  7. }
复制代码
extern调用外部函数

extern中声明函数默认是不安全的
调用C语言函数

  1. extern "C" {
  2.         fn abs(input: i32) -> i32;
  3. }
  4. fn main() {
  5.         unsafe {
  6.                 println!("Absolute value of -3 according to C: {}", abs(-3));
  7.         }
  8. }
复制代码
创建供C调用的接口

#[no_mangle]告诉编译器不必要修改函数名称。这里extern的是安全的。
  1. #[no_mangle]
  2. pub extern "C" fn call_from_c() {
  3.         println!("Just called a Rust function from C!");
  4. }
复制代码
全局变量(静态变量)

rust中的全局变量使用static标识,有着固定内存地址,可以是mut的,通常使用SCREAMING_SNAKE_CASE命名规则。读写mut的可变静态变量是不安全操纵,必要放在unsafe{}内部。
  1. static mut COUNTER: u32 = 0;
  2. fn add_to_count(inc: u32) {
  3.         unsafe {
  4.         COUNTER += inc;
  5.         }
  6. }
  7. fn main() {
  8.         add_to_count(3);
  9.         unsafe {
  10.                 println!("COUNTER: {COUNTER}");
  11.         }
  12. }
复制代码
不安全的trait

  1. unsafe trait Foo {
  2. // methods go here
  3. }
  4. unsafe impl Foo for i32 {
  5. // method implementations go here
  6. }
  7. fn main() {}
复制代码
访问联合体中的字段


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

老婆出轨

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表