簡體   English   中英

GCC:在無法解決自己的比較括號周圍建議括號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM