summaryrefslogtreecommitdiffstats
path: root/library/core/src/ffi/c_void.md
blob: ee7403aa04099ecbfbaca2881efbe9e6dda76499 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Equivalent to C's `void` type when used as a [pointer].

In essence, `*const c_void` is equivalent to C's `const void*`
and `*mut c_void` is equivalent to C's `void*`. That said, this is
*not* the same as C's `void` return type, which is Rust's `()` type.

To model pointers to opaque types in FFI, until `extern type` is
stabilized, it is recommended to use a newtype wrapper around an empty
byte array. See the [Nomicon] for details.

One could use `std::os::raw::c_void` if they want to support old Rust
compiler down to 1.1.0. After Rust 1.30.0, it was re-exported by
this definition. For more information, please read [RFC 2521].

[Nomicon]: https://doc.rust-lang.org/nomicon/ffi.html#representing-opaque-structs
[RFC 2521]: https://github.com/rust-lang/rfcs/blob/master/text/2521-c_void-reunification.md