MST
星途 面试题库

面试题:Rust与C语言如何进行简单的数据类型交互

假设你有一个用C语言编写的函数,它接收一个整数并返回该整数的平方。现在要用Rust调用这个C函数,你需要怎么做?请描述实现步骤,并给出关键代码示例,包括如何定义Rust的外部函数接口以及如何进行类型转换。
29.1万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 实现步骤
    • 编写C函数:编写一个简单的C函数,用于计算整数的平方。
    • 创建Rust项目:使用cargo new命令创建一个新的Rust项目。
    • 配置链接C代码:在Cargo.toml文件中配置链接C代码相关设置。
    • 定义Rust外部函数接口:在Rust代码中使用extern "C"来定义外部函数接口,注意类型转换。
    • 调用C函数:在Rust的main函数中调用定义好的外部函数。
  2. 关键代码示例
    • C代码(square.c
int square(int num) {
    return num * num;
}
  • Rust代码(src/main.rs
extern "C" {
    fn square(num: i32) -> i32;
}

fn main() {
    let num = 5;
    unsafe {
        let result = square(num);
        println!("The square of {} is {}", num, result);
    }
}
  • Cargo.toml配置
[package]
name = "call_c_function"
version = "0.1.0"
edition = "2021"

[build - dependencies]
cc = "1.0"

[package.metadata.cc]
crate_type = ["staticlib"]
files = ["square.c"]

在这个示例中,C函数square计算整数的平方。在Rust中,通过extern "C"定义了外部函数接口,注意参数和返回值类型都是i32,与C语言中的int类型对应。在main函数中,使用unsafe块调用该外部函数,因为调用外部函数绕过了Rust的安全检查机制。Cargo.toml中配置了使用cc构建依赖,并指定要编译的C文件为square.c,构建类型为静态库。