函数指针强制类型转换

在KAME的IPv6实现中,遇到ICMP6处理的问题,通过将不同原型的函数指针进行类型转换解决。例如,将`udp6_ctlinput`函数指针转换为通用的`ctlfunc`类型。在MTK手机平台的C文件中,存在`PsExtPeerFuncPtr`和`PsFuncPtr`两种函数指针类型,将`PsFuncPtr`类型的`Func2`转换为`PsExtPeerFuncPtr`类型并调用,尽管`Func2`只接受一个参数,但在转换后传入多个参数的行为会导致未定义行为。
摘要由CSDN通过智能技术生成

在学习KAME的IPv6实现过程中,在ICMP6的处理中遇到了相应问题,google了一下,找到了相应的答案。

 

首先定义了一个函数指针   void (*ctlfunc) (int, struct nps_sockaddr*, void*);

 

然后将协议转换表中的响应控制输入函数转换为定义的指针的类型

 

 以udp6_ctlinput为例,函数原型为 void udp6_ctlinput(int, struct nps_sockaddr*, void*)

 

 通过下面的赋值

 

   ctlfunc = (void  (*) (int, struct nps_sockaddr*, void*)) (udp6_ctlinput);

 

   然后使用指针ctlfunc 调用相关的上层协议处理函数。

 

   附    http://topic.csdn.net/u/20070904/18/90d27a6d-9a2d-41a1-9246-bf5b5662cd62.html

 

       我现在手头有这么一个C文件: (MTK手机平台)


       typedef   void   (*PsExtPeerFuncPtr)   (void   *,   int,   void   *); 
       typedef   void   (*PsFuncPtr)   (void   *); 

      PsExtPeerFuncPtr   Func1; 
      PsFuncPtr   Func2; 

      如下转换是否存在问题: 
      Func1   =   (PsExtPeerFuncPtr   *)Func2; 
      (*Func1   )   (a,b,   c); 

      这里略写Func2的实体 

      Func1函数有3个参数,Func2只有一个参数,那么a、b、c三个参数如何传到Func2中?

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值