первый:
a=2*(s-u*t)/SQUARE(t);
после замены определения мы получаем:
a=2*(s-u*t)/t*t;
сейчас, так как у нас нет ()
в определении SQUARE, мы получаем:
a=2*(10-30*2)/2*2; --> a=2*(-50)/2*2; --> a=-100/2*2; --> a=-50*2; --> a=-100
если вы хотите получить -25
, вы должны определить SQUARE(x)
как (x*x)
.
Редактировать: добавить объяснение относительно второго примера.
printf("%d\n"FUN(val1,2));
еще раз, сначала мы должны заменить определение (напоминание: ## «объединяет» строку определения - я не могу найти идеальные слова, чтобы объяснить это, так что просто посмотрите на пример ...)):
printf("%d\n",val12); [note: the comma (,) is missing - so it won't compile.]
, поскольку значение val12
равно 20
, вот что вы получите.
смысл этих двух примеров в том, чтобы помнить, что мы всегда должны иметь дело ссначала определяет (поскольку в «реальной жизни» компилятор (или препроцессор) делает это до времени выполнения)
Надеюсь, это поможет ..