簡體   English   中英

c評估順序

[英]c evaluation order

假設我有以下代碼

#define CHECK(result) do{                         \
                          if(result == 0)         \
                                 return false;    \
                           } while(0)


int sum(int a, int b){

    return (a + b);
}

int main(){
   int a = b = 0;
   CHECK(sum(a + b));
   reutnr 0;
}

我的問題是在C中求值的順序是什么,我的意思是:

result = sum(a, b) 
//and only after checking              
if(result == 0)         
   return false;    

要么

if(sum(a + b) == 0)         
   return false; 

提前致謝

宏替換將在實際編譯器看到代碼之前完成,因此編譯后的代碼將讀取

int main(){
  int a = b = 0;
  do {
    if(sum(a+b) == 0)
     return false;
  } while(0);
  reutnr 0;
}

永遠不會有一個名為result的變量。

另請注意,C沒有名為false的關鍵字。

C宏是純文本替換。 編譯器將完全看到:

do {
  if(sum(a + b) == 0)
    return false;
} while(0);

您的宏不會“生成” result變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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