c.评价顺序

c.评价顺序,c,operator-precedence,C,Operator Precedence,假设我有下面的代码 #define CHECK(result) do{ \ if(result == 0) \ return false; \ } while(0) int sum(int a, int b){ return (a + b);

假设我有下面的代码

#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;    


提前感谢

C宏是纯文本替换。编译器将准确地看到:

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

您的宏不会“生成”一个
结果
变量。

C宏是纯文本替换。编译器将准确地看到:

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

您的宏不会“生成”一个
结果
变量。

宏替换将在实际编译器看到代码之前完成,因此编译的代码将被读取

int main(){
  int a = b = 0;
  do {
    if(sum(a+b) == 0)
     return false;
  } while(0);
  reutnr 0;
}
永远不会有名为
result
的变量


还要注意的是,C没有名为
false

的关键字。宏替换将在实际编译器看到代码之前完成,因此编译的代码将被读取

int main(){
  int a = b = 0;
  do {
    if(sum(a+b) == 0)
     return false;
  } while(0);
  reutnr 0;
}
永远不会有名为
result
的变量


还请注意,C没有名为
false

的关键字,C99将宏true、false定义为1,0。但是你说得对,在普通C中使用true,false是一种不好的做法。特别是在这里,需要int并且
false==0==EXIT\u SUCCESS
。C99将宏true,false定义为1,0。但是你是对的,在普通C中使用true和false是一种不好的做法。特别是在这里,需要int和
false==0==EXIT\u SUCCESS