2017-06-08 59 views
2

我正在爲Rust編寫一個FFI包裝。我看到libc::c_charstd::os::raw::c_char的用法。我對C的知識非常少,我想知道是否有任何區別。如果我想通過cffi向Python公開一個字符串,應該使用什麼?我應該使用libc :: c_char還是std :: os :: raw :: c_char?

+0

「我的C知識是非常小的,我想知道是否有任何區別。「,爲什麼C應該關心這一點?這是關於生鏽的。這顯然是描述相同的事情。 C中的一個char – Stargateur

回答

2

我不能回答這是更地道,但我可以說,他們是在64位Linux(對大多數在線託管的文檔默認平臺)相同:

std::os::raw::c_char

type c_char = i8; 

libc::c_char

type c_char = i8; 

尋找在不同的平臺更廣泛地是有點複雜。標準庫tightly groups all the definitions for c_char,但是libc groups them by platform。考慮到這種類型的基本原理,我希望它們在所有平臺上都是相同的。

實際上,這些定義都不可能改變,所以可能沒有任何穩定性差異。

我的意見是使用標準庫版本的版本,直到我需要使用libc中的特定內容,在這種情況下,我可能會將所有類型切換到libc變體,以保持一致。

2

除了@ Shepmaster的回答,我想強調的事實libc不依賴於std

因此,如果你不能使用std,你將不得不使用libc。 這種情況可以看出here

目前默認鏈接到標準庫libc,但如果你不是喜歡一個#![no_std]情況或者木箱用libc中,您可以通過請求該信息:

[dependencies] 
libc = { version = "0.2", default-features = false } 
相關問題