gpt4 book ai didi

namespaces - 是否可以在不污染命名空间的情况下声明 extern "C"函数?

转载 作者:行者123 更新时间:2023-11-29 07:56:29 26 4
gpt4 key购买 nike

在 Rust 中,extern C 函数可以在外部作用域中声明:

#[link(name = "some_lib")]
extern "C" {
pub fn foo(path: *const c_char);
pub fn bar(path: *const c_char);
pub fn baz(path: *const c_char);
pub fn fez(path: *const c_char);
}

虽然可以接受,但每个函数都需要直接访问 foo() bar()...等

是否可以通过使用公共(public)前缀访问它们的方式来声明它们?

封装如何工作的示例:

namespace some_lib {
#[link(name = "some_lib")]
extern "C" {
pub fn foo(path: *const c_char);
// ... etc ...
}
}

fn some_rust_function() {
unsafe {
some_lib::foo(); // <-- example usage
}

}

这样的事情可能吗?

最佳答案

只需使用一个模块。

mod ffi {
extern "C" {
pub fn exit(_: i32) -> !;
}
}

fn main() {
unsafe { ffi::exit(1); }
}

关于namespaces - 是否可以在不污染命名空间的情况下声明 extern "C"函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38948997/

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