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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2009, 17:54   #1
Lazio
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 113
По умолчанию Макрофункции.

Требуется:
1) создать три заголовочных фаила и в каждом из них определить макропеременную ТЕST. Подкл. все три фаила к проекту. С помощью возможностей макропроцессора добейтесь подкл. в опр. момент времени одного из фаилов (??).
2) Определить макрофункцию MIN(a,b)
3) Сравнить результаты её работы со стандартной в след случаях (на примере SAMPLE_MACRO):

SAMPLE_MACRO(x,y);
SAMPLE_MACRO(x++,++y);
SAMPLE_MACRO(++x,y++);
SAMPLE_MACRO(x,y++);
SAMPLE_MACRO(x,++y);
SAMPLE_MACRO(++x,++y);

4) Расстановкой откр. и закр. скобок добится идентичного результата со стандартной функцией.
5). В программе с помощью макроопределения DEBUG подготовить отладочную ( с выводом промежуточных результатов работы функции для разных вариантов аргументов) и конечную ветки. Для релиза выводится только результат функции, для отладочной версии аргументы с названием переменной и знаком = например a=2 b=3

сделал 1 и 2:
Код:
#define one 
//#define two 
//#define tree

#ifdef one
#include "one.cpp"
#else

#ifdef two
#include "two.cpp"
#else

#ifdef tree
#include "tree.cpp"
#endif

#endif

#endif


2
#define TEST(X, Y) ((X) < (Y) ? (X) : (Y))
вот как остальное хз да и не понимаю что от меня хотят и вообще как увидеть работу макрофункции: исп. её в main'е ??

PS: только к студентам не надо, а то это такая х---я
Lazio вне форума Ответить с цитированием
Старый 21.03.2009, 22:20   #2
como
Форумчанин
 
Регистрация: 26.07.2008
Сообщений: 116
По умолчанию

3. идея такая:

Код:
#include <assert.h>
#include <stdlib.h>

#define MY_MIN(a, b) ...

int main()
{
    int x = 6;
    int y = 7;

    assert(MIN(x, y) == MY_MIN(x, y));
    // и т.д. для всех вариантов
}
5. обрати внимание на запятую после printf

Код:
#ifndef DEBUG
#    define MY_MIN(a, b) ((a) < (b) ? (a) : (b))
#else
#    define MY_MIN_DEBUG(a, b) ((a) < (b) ? (a) : (b))

#    define MY_MIN(a, b) \
        (printf("a = %i, b = %i, MY_MIN(a, b) = %i", (a), (b), MY_MIN_DEBUG((a), (b))), \
        MY_MIN_DEBUG((a), (b)))
#endif
como вне форума Ответить с цитированием
Старый 22.03.2009, 01:21   #3
Lazio
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 113
По умолчанию

ЕСТЬ!!! Лаба в нокауте!!!

СПАСИБО!!!!
Lazio вне форума Ответить с цитированием
Ответ


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