概述
示例代码如下
Rust部分:
#[no_mangle]
pub extern fn call_c_function(value: i32,fun: fn(i32) -> i32) -> i32 {
fun(value)
}
而C部分:
int32_t call_c_function(int32_t value,int32_t (*fun)(int32_t));
int32_t triple(int32_t x)
{
return x*3;
}
int main(int argc,char *argv[])
{
int32_t value = 3;
int32_t result = call_c_function(value,triple);
printf("%d tripled is %dn",value,result);
call_c_function(0,NULL); // Crash here
return EXIT_SUCCESS;
}
当然call_c_function的第二次调用会崩溃.
Rust编译器不会抱怨call_c_function中的不安全代码,因为从生锈的角度来看这段代码是安全的.也不允许简单地写:
if !fun.is_null() {
fun(value)
}
因为有趣的类型是fn(i32) – > i32(它不是指针).
所以我的问题是,如何保护call_c_function免受NULL指针取消引用?有没有办法检查从C传递的回调是否无效?
也许我必须改变call_c_function的定义?
最后
以上就是活泼芹菜为你收集整理的c语言中指针不为空判断,如何检查从C传递的函数指针是否为非NULL的全部内容,希望文章能够帮你解决c语言中指针不为空判断,如何检查从C传递的函数指针是否为非NULL所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复