From 7e6458873540da73b88a4904dfaa952053b25472 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonin=20D=C3=A9cimo?= Date: Thu, 26 Feb 2026 18:02:31 +0100 Subject: [PATCH] Explicit `extern "C"` ABI for FFI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See also [`items.extern.abi.default`][1]. > If the ABI string is not specified, it defaults to `"C"`. > The `extern` syntax without an explicit ABI is being phased out, so > it’s better to always write the ABI explicitly. > > For more details, see Rust issue [#134986][]. [1]: https://doc.rust-lang.org/reference/items/external-blocks.html#r-items.extern.abi.default [#134986]: https://github.com/rust-lang/rust/issues/134986 --- src/ffi.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ffi.md b/src/ffi.md index 769a424..679e237 100644 --- a/src/ffi.md +++ b/src/ffi.md @@ -356,7 +356,7 @@ extern fn callback(a: i32) { } #[link(name = "extlib")] -unsafe extern { +unsafe extern "C" { fn register_callback(cb: extern fn(i32)) -> i32; fn trigger_callback(); } @@ -417,9 +417,9 @@ unsafe extern "C" fn callback(target: *mut RustObject, a: i32) { } #[link(name = "extlib")] -unsafe extern { +unsafe extern "C" { fn register_callback(target: *mut RustObject, - cb: unsafe extern fn(*mut RustObject, i32)) -> i32; + cb: unsafe extern "C" fn(*mut RustObject, i32)) -> i32; fn trigger_callback(); } @@ -548,7 +548,7 @@ blocks with the `static` keyword: ```rust,ignore #[link(name = "readline")] -unsafe extern { +unsafe extern "C" { static rl_readline_version: libc::c_int; } @@ -568,7 +568,7 @@ use std::ffi::CString; use std::ptr; #[link(name = "readline")] -unsafe extern { +unsafe extern "C" { static mut rl_prompt: *const libc::c_char; } @@ -659,7 +659,7 @@ In C, functions can be 'variadic', meaning they accept a variable number of argu be achieved in Rust by specifying `...` within the argument list of a foreign function declaration: ```no_run -unsafe extern { +unsafe extern "C" { fn foo(x: i32, ...); }