gpt4 book ai didi

C 代码的 Rust 版本

转载 作者:行者123 更新时间:2023-11-29 08:34:18 25 4
gpt4 key购买 nike

非常简单,我怎样才能在 Rust 中做我在 C 中做的同样的事情。

C 代码:

extern mps_res_t mps_arena_create_k(mps_arena_t *);

mps_arena_t arena;
res = mps_arena_create_k(&arena);

在 C 中这是有效的,所以在 rust 中我做了:

extern "C" {
pub fn mps_arena_create_k(arg1: *mut mps_arena_t) -> mps_res_t;
} // created by rust_bindgen

unsafe {
let mut arena : *mut mps_arena_t;
res = mps_arena_create_k(arena);
}

问题是编译器提示:

error: use of possibly uninitialized variable: `arena`

我不是一个好的 C 程序员,但这种模式很常见,我如何在 Rust 中做到这一点?

最佳答案

使用std::mem::uninitialized让变量暂时未初始化:

let mut arena: mps_arena_t;
let res;
unsafe {
arena = std::mem::uninitialized();
res = mps_arena_create_k(&mut arena);
}

请注意,arena 应键入为 mps_arena_t 而不是 *mut mps_arena_t(可能是音译错误?)。您还需要将 arena 置于 unsafe block 之外(因此分离了 let 和赋值),除非您很快要销毁它。

关于C 代码的 Rust 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26665441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com