2017-12-28 51 views
-2

아래 비교를 시도하고 있습니다.GCC4.8 버전 피연산자 '!'주위에 괄호를 사용하는 것이 좋습니다.

오류 : 시도는 GCC 4.8의 새 버전으로 던지고 오류를 컴파일

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; 
} 

'!'의 피연산자 괄호 제안을 또는 '&'을 '& &'또는 '!'로 변경하십시오. 에 '~'[-Werror = 괄호] ((tsn_ptpP-> tsn_ptpRegP-> tsn_ptpPortRegP [PortNumber이] -!는?> portEnable & 0x10000에) ||

는 사람이 해결을 도와 주실 래요

+0

&를 &로 바꾸면 문제가 해결됩니다. 감사! – Johnney

+2

부울을 취하면 실제로 원하는 것을 생각하지 않습니다. 실제로 의미가 없습니다. –

+0

'! tsn_ptpP-> tsn_ptpRegP-> tsn_ptpPortRegP [PortNumber] -> portEnable & 0x10000 'to '! (tsn_ptpP> tsn_ptpRegP-> tsn_ptpPortRegP [PortNumber] -> portEnable & 0x10000)'와 비슷하게 다음 서브 표현식에 사용됩니다. –

답변

2

에서 다음

(!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) 
+0

@SoronelHaetier 당신 말이 맞습니다. 나는 변화를했으며 예상대로 일했다. 감사! – Johnney