我正在为Rust编写一个FFI包装器。我看到了libc::c_char
和std::os::raw::c_char
的用法。我的C语言知识非常有限,不知道这两者之间是否有区别。如果我想通过cffi将字符串暴露给Python,应该使用哪个?
我无法回答哪个更惯用,但我可以说它们在64位Linux上相同(大多数在线托管文档的默认平台):
type c_char = i8;
type c_char = i8;
对于跨不同平台的更广泛考虑会更加复杂。标准库 紧密地组织了c_char
的所有定义,但libc则按平台分组。考虑到这种类型的基本性质,我期望它们在所有平台上都是相同的。
实际上,这些定义都不太可能改变,因此可能没有稳定性差异。
我的建议是在需要使用libc
中的特定内容之前,先使用标准库版本的,然后在需要时将所有类型切换为libc
的变量,以保持一致性。
libc
不依赖于std
。std
,则必须使用libc
。可以在此处查看此情况here。
目前,默认情况下libc链接到标准库,但如果您希望在
#![no_std]
情况或crate中使用libc,则可以通过以下方式请求:
[dependencies]
libc = { version = "0.2", default-features = false }
char
代表一个字符。 - Stargateur