gpt4 book ai didi

rust - 如何获取函数的地址?

转载 作者:行者123 更新时间:2023-11-29 07:46:28 28 4
gpt4 key购买 nike

如何在 Rust 中获取函数地址? “&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;
}

I need not to work with them in Rust, I need an address because I have some FFI that takes an address of the symbol in the current process

您仍然可以按原样将函数传递给将使用回调的外部函数:

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); }
}

关于rust - 如何获取函数的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32320661/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com