У меня есть простой макрос для добавления 2 переменных, который не работает должным образом.
#include <iostream>
using namespace std;
#define ADD(x,y) (x+y);
int main() {
int a = 10;
int b = 1;
int c = ADD(a,b)+1; //c=11 - NOT EXPECTED
int c = 1+ADD(a,b); //c=12 - EXPECTED
cout<< c;
}
В приведенном выше коде, когда я добавляю 1 в начале макроса, он дает ожидаемый результат,Но если я добавлю 1 в конце, это на самом деле не добавляет 1.
Почему это происходит? Насколько мне известно, когда используется макрос, компилятор просто заменит макрос строкой токена во время компиляции. Если это так, в обоих случаях выходные данные должны быть одинаковыми.
Первый случай: c = (a+b)+1
Второй случай c = 1+(a+b)