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