Объясните C Макро - PullRequest
       1

Объясните C Макро

0 голосов
/ 27 июня 2011
#define MAX(a,b) ((dx > dy) ? dx : dy)

Кто-нибудь возражает против разрушения части ((dx> dy)? Dx: dy)?Это приходит из урока консоли 1-60.

Ответы [ 6 ]

8 голосов
/ 27 июня 2011

Это примерно эквивалентно:

int MAX (int dx, int dy)
{
  if (dx > dy)
    return dx;
  else
    return dy;
}

Это также не правильно.Должно быть:

#define MAX(a,b) ((a)>(b))?(a):(b)
2 голосов
/ 27 июня 2011

Вы смотрите на Тернарный оператор.

1 голос
/ 27 июня 2011

test ? expr1 : expr2 - троичный оператор. Это выражение оценивается как expr1, если test истинно, и expr2 в противном случае.

1 голос
/ 27 июня 2011

Как написано, строка не имеет смысла для меня. Но

#define MAX(a, b)  ((a > b) ? a : b)

переводит примерно, в псевдокоде, на

#define MAX(a,b)  if (a > b) then a else b
0 голосов
/ 27 июня 2011
int MAX (int dx, int dy)
{
  if (dx > dy)
    return dx;
  else
    return dy;
}
0 голосов
/ 27 июня 2011

Это означает, что если dx больше, чем dy, то выберите dx, в противном случае выберите dy.

...