Я попытался воспроизвести определение макроса SQR
в следующем коде:
#define SQR(x) (x*x)
int main()
{
int a, b=3;
a = SQR(b+5); // Ideally should be replaced with (3+5*5+3), though not sure.
printf("%d\n",a);
return 0;
}
Он печатает 23
. Если я изменил определение макроса на SQR(x) ((x)*(x))
, тогда вывод будет таким, как ожидалось, 64
. Я знаю, что вызов макроса в C заменяет вызов с помощью определения макроса, но я все еще не могу понять, как он рассчитал 23
.