Я начал читать Эффективное использование C++ и в какой-то момент в пункте 2, следующее упоминается:функции, как макросы и странное поведение
// call f with the maximum of a and b
#define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))
...
int a = 5, b = 0;
CALL_WITH_MAX(++a, b); // a is incremented twice
CALL_WITH_MAX(++a, b+10); // a is incremented once
Здесь количество раз, которое увеличивается до вызова f зависит от того, с чем он сравнивается!
В самом деле, если я использую простой оператор печати в f
, 7 печатается в первом вызове, но я не могу за жизнь мне понять, почему. Мне что-то не хватает?
@nhahtdh Не просто «думать о», макросы * делать * простая замена текста. Со многими компиляторами (например, g ++) вы можете попросить просмотреть код после прохождения препроцессора. – dmckee