我正在为Rust写一个FFI包装器。我见过libc::c_char
和std::os::raw::c_char
的用法。我对C的了解很少,我想知道是否有任何区别。如果我想通过cffi将字符串暴露给Python,我该怎么用?
答案 0 :(得分:6)
我无法回答哪个更惯用,但我可以说它们在64位Linux(大多数在线托管文档的默认平台)上是相同的:
type c_char = i8;
type c_char = i8;
在不同平台上展望更广泛有点复杂。标准库tightly groups all the definitions for c_char
,但libc groups them by platform。考虑到这种类型的基本程度,我希望它们在所有平台上都是相同的。
实际上,这些定义都不可能发生变化,因此可能没有任何稳定性差异。
我的意见是使用标准库版本中的那个,直到我需要使用libc
中的特定内容,在这种情况下,我可能会将所有类型切换到libc变体,只是为了始终如一。
答案 1 :(得分:6)
除了@ Shepmaster的回答,我想强调libc
不依赖于std
这一事实。
因此,如果您无法使用std
,则必须使用libc
。
可以看到这种情况here。
目前libc默认链接到标准库,但是如果您想在
#![no_std]
情况下使用libc或crate,可以通过以下方式请求:
[dependencies]
libc = { version = "0.2", default-features = false }