GCC4.8版本建议在'!'的操作数周围使用括号

时间:2017-12-28 06:54:16

标签: c gcc

我正在尝试下面的比较。

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)||

有谁可以帮我解决这个问题?

1 个答案:

答案 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