我正在为Rust写一个FFI包装器.我已经看到两者的用法libc::c_char
和std::os::raw::c_char
.我对C的了解很少,我想知道是否有任何区别.如果我想通过cffi将字符串暴露给Python,我应该使用什么?
我不能回答哪个更惯用,但我可以说它们在64位Linux(大多数在线托管文档的默认平台)上是相同的:
type c_char = i8;
Run Code Online (Sandbox Code Playgroud)
type c_char = i8;
Run Code Online (Sandbox Code Playgroud)
在不同平台上更广泛地观察会更复杂一些.标准库紧密地组合了所有定义c_char
,但是libc按平台对它们进行分组.考虑到这种类型的基础,我希望它们在所有平台上都是一样的.
实际上,这些定义都不可能发生变化,因此可能没有任何稳定性差异.
我的意见是使用标准库版本中的那个,直到我需要使用特定的东西libc
,在这种情况下,我可能会将所有类型切换到libc变体,只是为了保持一致.
除了@ Shepmaster的回答,我想强调一个libc
不依赖的事实std
.
因此,如果你不能使用std
,你将不得不使用libc
.这种情况可以在这里看到.
目前libc默认链接到标准库,但如果您想在某种
#![no_std]
情况下使用libc 或crate,您可以通过以下方式请求:
[dependencies]
libc = { version = "0.2", default-features = false }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
722 次 |
最近记录: |