c порядок оценки - PullRequest
       1

c порядок оценки

1 голос
/ 24 сентября 2011

давайте предположим, что у меня есть следующий код

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

заранее спасибо

Ответы [ 2 ]

1 голос
/ 24 сентября 2011

Подстановка макроса будет выполнена до того, как фактический компилятор даже увидит код, поэтому скомпилированный код будет читать

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

Никогда не будет переменной с именем result.

Также обратите внимание, что в C нет ключевого слова с именем false.

0 голосов
/ 24 сентября 2011

C макросы - это простые текстовые замены. Компилятор увидит точно:

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

Ваш макрос не "генерирует" переменную result.

...