Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2010, 18:53   #1
N1KeL
Пользователь
 
Аватар для N1KeL
 
Регистрация: 20.04.2009
Сообщений: 58
По умолчанию Проблема с макроопределением

Приветствую, уважаемые форумчане!
В коде по С++ есть такое макроопределение:
Код:
#define MAX(a, b) ( (a > b) ? a : b )
а также часть кода:
Код:
int x1 = 1, y1 = 2, x2 = 1, y2 = 2;
cout << max(x1, y1++) << endl; // стандартная функция C++, возвращающая максимальное из двух чисел
cout << MAX(x2, y2++) << endl;
Результаты разумеется выводятся разные

Задание такое:
Расстановкой открывающих и закрывающих скобок в теле макроопределения добиться идентичного результата со стандартной функцией.

Я пробовал сделать так, но это не помогло:
Код:
#define MAX(a, b) ( ( (a) > (b) ) ? (a) : (b) )
Я уже начал сомневаться в выполнимости этого задания, поэтому рассчитываю на вашу помощь.
N1KeL вне форума Ответить с цитированием
Старый 09.03.2010, 09:24   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Тут ты что-то неудачный пример взял...
в случае с макроопределением у тебя код компилятор заменит на:
Код:
cout << ( (x2 > (y2++)) ? x2 : (y2++)) << endl;
А здесь насколько я помню сначала выполнится ++ т.е. y2 увеличится, а уж потом проверка пойдет.

А в max стандартном в параметрах передаются константы, т.е. y1++ для него не будет ничего означать, и останется y1 (ибо это константа-параметр), потому он и вернет тебе то что находится в y1 без инкремента.

Поправь если я не прав, но по-моему именно так
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.03.2010, 09:35   #3
N1KeL
Пользователь
 
Аватар для N1KeL
 
Регистрация: 20.04.2009
Сообщений: 58
По умолчанию

Это один из примеров в моей лабе.
Судя по выводимым данным (2, 3) в макроопределении сначала происходит проверка, а затем увеличение, следовательно возвращаться будет уже увеличенное число. А в стандартной все так, как и должно быть) сначала печатается двойка, а затем она увеличивается, но это уже не играет никакой роли.
Проблема в том, что именно с таким примером макроопределение должно вернуть двойку, а не тройку
N1KeL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с макроопределением. Lazio Общие вопросы C/C++ 0 24.03.2009 21:25
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37