关于C语言函数指针赋值的问题

NEE1988 2016-01-07 09:04:41
如下代码是一个公共的接口:
typedef struct tag_PHY_IF_CTL{
BOOLEAN* p_fd_state;
void* p_fd; //串口、网络都可以
UINT8** pp_error_str;
INT32(*p_PhyIfConnect)(void *);
INT32(*p_PhyIfRecv)(void *, UINT8 *buf, INT32 len);
INT32(*p_PhyIfSend)(void *, UINT8 *buf, INT32 len);
INT32(*p_PhyIfFlush)(void *);
INT32(*p_PhyIfClose)(void *);
}PHY_IF_CTL;

将以下一个结构体中的函数指针
#pragma pack(1)
typedef struct tag_UART_CTL{
//串口私有项
UINT8 uart_number;
UINT32 baudrate;
UINT8 databit;
UINT8 stopbit;
UINT8 parity;
UINT32 timeout_ms;
pthread_mutex_t *uart_mutex;
//物理接口项目(网口或串口)
BOOLEAN fd_state; //是否连接成功
#if defined __GNUC__
INT32 fd;
#elif defined _MSC_VER
HANDLE fd;
#endif
UINT8 *p_error_str;
INT32(*p_UartConnect)(struct tag_UART_CTL *p_uart_c);
INT32(*p_UartSend)(struct tag_UART_CTL *p_uart_c, UINT8 *buf, INT32 len);
INT32(*p_UartRecv)(struct tag_UART_CTL *p_uart_c, UINT8 *buf, INT32 len);
INT32(*p_UartFlush)(struct tag_UART_CTL *p_uart_c);
INT32(*p_UartClose)(struct tag_UART_CTL *p_uart_c);
}UART_CTL;

如下图赋值时
p_3761_c->phy_if_c.p_PhyIfConnect = p_uart_c->p_UartConnect;
p_3761_c->phy_if_c.p_PhyIfSend = p_uart_c->p_UartSend;
p_3761_c->phy_if_c.p_PhyIfRecv = p_uart_c->p_UartRecv;
p_3761_c->phy_if_c.p_PhyIfClose = p_uart_c->p_UartClose;
p_3761_c->phy_if_c.p_PhyIfFlush = p_uart_c->p_UartFlush;

gcc会报warning: assignment from incompatible pointer type这个警告

是不是我PHY_IF_CTL中函数指针参数void* 与 UART_CTL中struct tag_UART_CTL 类型不匹配,求教下如何解决该问题?


...全文
277 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
NEE1988 2016-01-08
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
对函数指针类型楼主就不会用强制类型转换了?
你好,我这个函数指针在结构体里面,我如何进行强制类型转换呢?还有我只是参数不同,函数指针类型相同的
zhouxiaofeng1021 2016-01-08
  • 打赏
  • 举报
回复
引用 4 楼 paschen 的回复:
引用 2 楼 jiajian517074779 的回复:
[quote=引用 1 楼 zhao4zhong1 的回复:] 对函数指针类型楼主就不会用强制类型转换了?
你好,我这个函数指针在结构体里面,我如何进行强制类型转换呢?还有我只是参数不同,函数指针类型相同的
参数类型不同,函数就不同,函数指针类型就不同!typdef一个需要类型的函数指针xxx,然后可以(xxx)aaa可以将aaa类型转成xxx类型 [/quote] 就是啊 STD LIB 里面很多类型都是这样干的
paschen 2016-01-08
  • 打赏
  • 举报
回复
引用 2 楼 jiajian517074779 的回复:
引用 1 楼 zhao4zhong1 的回复:
对函数指针类型楼主就不会用强制类型转换了?
你好,我这个函数指针在结构体里面,我如何进行强制类型转换呢?还有我只是参数不同,函数指针类型相同的
参数类型不同,函数就不同,函数指针类型就不同!typdef一个需要类型的函数指针xxx,然后可以(xxx)aaa可以将aaa类型转成xxx类型
赵4老师 2016-01-08
  • 打赏
  • 举报
回复
函数参数不同,对应的函数指针类型也不同。
赵4老师 2016-01-07
  • 打赏
  • 举报
回复
对函数指针类型楼主就不会用强制类型转换了?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧