我正在以两种方式调用以下库函数:
unsigned int
LsSendToQ(unsigned int p4Node, const char queueName[4], lsMsg *pMsg,
unsigned int prio) {
}
第一种方法:
LsSendToQ((unsigned int)0, (const char *)Q_NAME, (lsMsg *)(void *)pMsg, 0)
第二种方式如下:
LsSendToQ((unsigned int)0, (const char *)Q_NAME, (lsMsg *)pMsg, 0)
这两个调用都可以通过编译,但哪一个是正确的呢?为什么第一个调用中使用了(void *)
,看起来像是一个函数指针呢?
Q_NAME
是如何定义的?pMsg
是如何定义的?第一个转换是无用的,(lsMsg *)(void *)pMsg
是多余的,但可能需要消除编译器警告。 - chqrlieLsSendToQ(0, Q_NAME, pMsg, prio);
。对于pMsg
的强制类型转换可能是必需的,但仅根据您发布的内容无法确定。 - M.Mvoid*
的转换将始终是 reinterpret_cast,而直接转换可能会被翻译为静态转换到子对象的地址)。 - Peter - Reinstate Monica