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

问题描述 投票:-2回答:1

我正在尝试下面的比较。

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

任何人都可以帮我解决这个问题吗?

c gcc
1个回答
2
投票

在下面的:

(!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)  
© www.soinside.com 2019 - 2024. All rights reserved.