У меня этот простой код C с макро:Почему использование следующей макрофункции в C приводит к 1 вместо 2?
#include <stdio.h>
#define MAX(x, y) x>y ? 1 : 0
int main() {
int i = 9;
printf("%d\n", MAX(10, i) + 1);
return 0;
}
Теперь, как я понимаю функцию макросъемки, если значение х (которое равно 10) больше, чем значение у (которая 9 в этом случае), то макрос возвращает 1 другой нулевой нуль. Таким образом, не следует ли выводить выше 2 вместо 1 в этом случае после добавления 1 к окончательному результату макроса?
Макросы не являются функциями, и они не возвращают вещи. Макросы - это замена текста (ну, замена токенов, действительно). Подключите фактический текст макроса на сайте использования, а '10' и' i' будут заменены словами 'x' и' y'. – user2357112
Обратите внимание, что 'MAX' не является хорошим именем для этого макроса, так как я ожидаю, что он вернет либо' x', либо 'y', в зависимости от того, что больше. Возможно, 'IS_GREATER_THAN'? – isanae