Квадрат числа, определяемого с помощью #define - PullRequest
10 голосов
/ 15 сентября 2010

Я просто просматривал определенный код, который часто спрашивают в интервью. У меня возникли определенные вопросы, может ли кто-нибудь помочь мне в этом?

Я сейчас совершенно запутался,

#include <stdio.h>
#include <conio.h>

#define square(x) x*x

main()
{
      int i, j;
      i = 4/square(4);
      j = 64/square(4);
      printf("\n %d", i);
      printf("\n %d", j);
      printf("\n %d", square(4));
      getch();
}

Вывод:

 4
 64
 16

Мне интересно, почему square(4) вернул 1, когда я его разделил? Я имею в виду, как я могу получить значения 4 и 64 , когда я делю его, но при непосредственном использовании я получаю 16 !!?

Ответы [ 11 ]

1 голос
/ 15 сентября 2010

Вручную разверните макрос в коде, и это будет понятно.То есть замените все квадраты (x) точно на x * x, в частности, не добавляйте круглые скобки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...