我正在尝试下面的比较。
if ((tmp->tskt_pRegP->init & 0x1) ||
(rmppP->portAnnounceRecSMP->rcvdAnnounce &&
((!tsn_ptpP->tsn_ptpRegP->tsn_ptpPortRegP[PortNumber]->portEnable & 0x10000)||
(!tsn_ptpP->tsn_ptpRegP->tsn_ptpPortRegP[PortNumber]->portEnable & 0x20000)||
(!tsn_ptpPortAttrP->asCapable))))
{
tsn_ptpPortAttrP->portAnnounceRecSMP->curr = TEST_RECEIVE_STATE_DISCARD;
}
当尝试使用较新版本的gcc 4.8编译它时,它会抛出错误:
错误:建议围绕“!”操作数的括号或将'&'更改为'&&'或'!'到'〜'[-Werror =括号]((!tsn_ptpP-> tsn_ptpRegP-> tsn_ptpPortRegP [PortNumber] - > portEnable&0x10000)||
任何人都可以帮我解决这个问题吗?
在下面的:
(!tsn_ptpP->tsn_ptpRegP->tsn_ptpPortRegP[PortNumber]->portEnable & 0x10000)
!
比&
具有更高的优先级,并且如果你真的想要将它应用于tsn_ptpP->tsn_ptpRegP->tsn_ptpPortRegP[PortNumber]->portEnable
,那么它应用于tsn_ptpP->tsn_ptpRegP->tsn_ptpPortRegP[PortNumber]->portEnable & 0x10000
你需要将该表达式括在括号中:
!(tsn_ptpP->tsn_ptpRegP->tsn_ptpPortRegP[PortNumber]->portEnable & 0x10000)