warning: initialization of ‘int (*)(int, int)’ from incompatible pointer type ‘void (*)(int, int)’警告

文章讲述了在编程中遇到函数指针类型不匹配的错误,提供了两种解决方案:一是通过定义中间函数进行类型转换,二是调整函数指针类型使其与目标函数一致。解决了编译错误,确保了代码的正确执行。
摘要由CSDN通过智能技术生成

问题定义

这个报错的原因是函数指针类型不匹配。

具体来说,代码中定义了一个函数指针变量,它的类型是 int(*)(int,int),但是在赋值时,右侧的函数类型是 void(*)(int,int),两个类型不匹配,导致编译器报错。

问题解决

方法一

需要让左右两侧的函数类型匹配。可以通过定义一个中间函数,将右侧函数的参数转换成左侧函数需要的参数类型,同时将右侧函数的返回值类型转换成左侧函数需要的返回值类型,然后将中间函数的函数名(指针)赋值给左侧函数指针变量。例如:

// 转换参数类型,并调用左侧函数需要的参数类型
int setPinValue_translate(int pin, int value){
    setPinValue(pin, value);  // 返回类型为void
    return 1;   //可以自己支配返回值
}

// 将中间函数的指针赋值给左侧函数指针变量
gpio_set_val_ptr = setPinValue_translate;   //返回类型为int

即可解决函数指针类型不匹配的问题

方法二

更加彻底的解决方法就是,通过调整函数指针的返回值类型和参数类型和目标函数一致,让函数指针在赋值时,右侧的函数类型和其类型匹配

// 此时应该确保 函数指针的类型也为 void (*) (int ,int) 和
// 目标函数 void (*)(int ,int) 一致
gpio_set_val_ptr = setPinValue;   

同样可以解决函数指针类型不匹配的问题

编译后警告解除,完结撒花!!!

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值