[英]How do I obtain the address of a function?
如何在Rust中獲取function地址? “&somefunction”到底是什么意思?
我要做什么地址
std::mem::transmute::<_, u32>(function)
或者
std::mem::transmute::<_, u32>(&function)
(當然是在 32 位系統上)?
做什么
&function as *const _ as *const c_void
給?
如果我只是想知道一個函數的地址,我可能只是打印出來:
fn moo() {}
fn main() {
println!("{:p}", moo as *const ());
}
但是,我想不出一個有用的理由想要這樣做。 通常,你想要對這個功能做些什么 。 在這些情況下,您不妨直接傳遞函數,無需處理地址:
fn moo() {}
fn do_moo(f: fn()) {
f()
}
fn main() {
do_moo(moo);
}
我對此不太確定,但我認為std::mem::transmute::<_, u32>(&function)
只會創建一個指向function
的局部變量,然后獲取對該變量的引用。 這將匹配此代碼的工作方式:
fn main() {
let a = &42;
}
我不需要在Rust中使用它們,我需要一個地址因為我有一些FFI在當前進程中獲取符號的地址
您仍然可以將函數原樣傳遞給將使用回調的extern函數:
extern {
fn a_thing_that_does_a_callback(callback: extern fn(u8) -> bool);
}
extern fn zero(a: u8) -> bool { a == 0 }
fn main() {
unsafe { a_thing_that_does_a_callback(zero); }
}
@Shepmaster 的回答給出了這個問題的答案(雖然也給出了其他不相關但可能對某些人有用的信息)。 我在這里總結一下。
獲取地址很簡單,只需
funct as *const ()
引用 function 似乎創建了一個局部變量,就像 with
let a = &42;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.