![](/img/trans.png)
[英]GCC4.8 Version Suggest to use parentheses around operand of '!'
[英]GCC: suggest parentheses around comparison parentheses not able to solve myself
我正在嘗試檢查是否等於零
//Address already malloc
void MyCheck (void *Address){
if ( (long)Address & (~(sizeof(long)-1)) != 0 ){
printf("Invalid");
}
}
嘗試編譯時,請給我:
Error: suggest parentheses around comparison in operand
of '&' [-Werror=parentheses]
!=
優先級比&
優先級高,因此您的代碼實際上&
代碼相同:
if ((long)Address & ( (~(sizeof(long)-1)) != 0 ) )
^ ^
gcc建議這可能是錯誤,可能是。 您想要:
if ( ( (long)Address & (~(sizeof(long)-1)) ) != 0 )
^ ^
在if
語句中的(long)Address & (~(sizeof(long)-1))
周圍放置一個花括號。
if ( ( (long)Address & (~(sizeof(long)-1)) ) != 0 ){
!=
的優先級比&
,因此您實際上要說的是:
if ((long)Address & ((~(sizeof(long)-1)) != 0)){
printf("Invalid");
}
而是在第一部分的前面加上括號:
if (((long)Address & (~(sizeof(long)-1))) != 0){
printf("Invalid");
}
但是,由於在TI-Basic和C中有很多背景,因此我個人會忽略!= 0
部分:
if ((long)Address & (~(sizeof(long)-1))){
printf("Invalid");
}
盡管其他答案已經解決了編譯器錯誤,但是您可以通過以下方式回避問題:
if ((uintptr_t) Address % sizeof(long)) …
(要獲取uintptr_t
,請包含<stdint.h>
。而且,如果使用的是C 2011,則可能要用_Alignof(long)
替換sizeof(long)
_Alignof(long)
。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.