我正在尝试下面的比较。
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编译它时,它会抛出错误:
错误:建议围绕“!”操作数括起来的括号或改变'&'到'&&'要么 '!'到'〜'[ - 错误=圆括号] ((!tsn_ptpP-> tsn_ptpRegP-> tsn_ptpPortRegP [PortNumber] - > portEnable& 0x10000)||
有谁可以帮我解决这个问题?
答案 0 :(得分:2)
以下内容:
s2 = move(s)
(!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