Skip to content

Commit

Permalink
Merge pull request #273 from JohnTitor/mention-extern-types
Browse files Browse the repository at this point in the history
Mention "extern types" on the opaque structs section
  • Loading branch information
ehuss authored Jun 18, 2021
2 parents b44af9d + 538345a commit 2e159b0
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions src/ffi.md
Original file line number Diff line number Diff line change
Expand Up @@ -703,9 +703,8 @@ for more information.

## Representing opaque structs

Sometimes, a C library wants to provide a pointer to something, but not let you
know the internal details of the thing it wants. The simplest way is to use a
`void *` argument:
Sometimes, a C library wants to provide a pointer to something, but not let you know the internal details of the thing it wants.
A stable and simple way is to use a `void *` argument:

```c
void foo(void *arg);
Expand Down Expand Up @@ -774,3 +773,9 @@ Notice that it is a really bad idea to use an empty enum as FFI type.
The compiler relies on empty enums being uninhabited, so handling values of type
`&Empty` is a huge footgun and can lead to buggy program behavior (by triggering
undefined behavior).

> **NOTE:** The simplest way would use "extern types".
But it's currently (as of June 2021) unstable and has some unresolved questions, see the [RFC page][extern-type-rfc] and the [tracking issue][extern-type-issue] for more details.

[extern-type-issue]: https://github.com/rust-lang/rust/issues/43467
[extern-type-rfc]: https://rust-lang.github.io/rfcs/1861-extern-types.html

0 comments on commit 2e159b0

Please sign in to comment.