Я відслідковую помилку в коді сторонньої сторони, і я звузив її до чогось уздовж лінії.
use libc::c_void;
pub unsafe fn foo() {}
fn main() {
let ptr = &foo as *const _ as *const c_void;
println!("{:x}", ptr as usize);
}
Починаючи з стабільного 1,38.0, це друкує функцію вказівника, але бета (1,39,0-бета 6) та нічне повернення "1". ( Дитячий майданчик )
Про що робиться _
висновок і чому поведінка змінилася?
Я припускаю, що правильний спосіб передавати це був би просто foo as *const c_void
, але це не мій код.
let ptr = foo as *const fn() as *const c_void;
foo
- це вже покажчик функції, тому не слід приймати до нього адресу. Це створює подвійну посилання, здавалося б, нульового типу (таким чином, магічне значення1
).