我们假设我有以下代码
#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;
提前致谢
答案 0 :(得分:1)
宏替换将在实际编译器甚至看到代码之前完成,因此编译的代码将读取
int main(){
int a = b = 0;
do {
if(sum(a+b) == 0)
return false;
} while(0);
reutnr 0;
}
永远不会有一个名为result
的变量。
另请注意,C没有名为false
的关键字。
答案 1 :(得分:0)
C宏是纯文本替换。编译器将完全看到:
do {
if(sum(a + b) == 0)
return false;
} while(0);
您的宏不会“生成”result
变量。