Программа C ниже:Почему макросы, подобные функции, оцениваются в нормальном порядке в C?
#define p(x) (printf("%d ", x))
#define q(a,b,c) ({int total = a; printf("%d ", b); total += c;})
int main(){
q(p(1), 2, p(3));
}
Производит вывод 1 2 3
, показывая, что использовали Нормальная оценка заказа. Тем не менее, для обычных функций, такие, как этот фрагмент:
int p(int i){
printf("%d ", i);
return i;
}
void q(int a, int b, int c){
int total = a;
printf("%d ", b);
total += c;
}
int main(){
q(p(1), 2, p(3));
}
выход 1 3 2
, подразумевая, что используется оценка аппликативного порядка. Какова основа для такого поведения? Как аргументы макроса оцениваются по сравнению с функцией?
Почему бы и нет? –
Скомпилировать с помощью '-E', узнать мощность препроцессора. – user3386109
Я не уверен, что 'p (x)', как показано здесь, делает то, что вы думаете. – keshlam