타사 코드에서 오류를 추적하고 있으며 그 줄을 따라 무언가를 좁혔습니다.
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-beta.6) 및 야간 반환 '1'이 표시됩니다. ( 운동장 )
_추론 은 무엇 이며 왜 행동이 바뀌 었습니까?
이것을 캐스팅하는 올바른 방법은 간단하다고 생각 foo as *const c_void하지만 이것은 내 코드가 아닙니다.
let ptr = foo as *const fn() as *const c_void;
foo이미 함수 포인터이므로 주소를 가져 가지 않아야합니다. 크기가 0 인 유형 (이것은 마법의 가치1)에 대한 이중 참조를 만듭니다 .