【发布时间】:2016-12-24 17:05:18
【问题描述】:
我有这个 C 代码:
typedef void (*f_t)(int a);
struct Foo {
f_t f;
};
extern void f(struct Foo *);
bindgen 生成以下 Rust 代码(我已经删除了不重要的细节):
#[repr(C)]
#[derive(Copy, Clone)]
#[derive(Debug)]
pub struct Foo {
pub f: ::std::option::Option<extern "C" fn(a: ::std::os::raw::c_int)>,
}
我不明白为什么Option 在这里。显然Rustenum和C指针在位级别上不是一回事,那么Rust编译器是如何处理的呢?
当我调用 C f 函数并将指针传递给 Rust 结构 Foo 时,编译器是否将 Foo_rust 转换为 Foo_C,然后只将指向 Foo_C 的指针传递给 f?
【问题讨论】:
标签: rust