Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Avadd
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 17
#1

Несколько макро с разными параметрами

23.04.2014, 17:50. Просмотров 273. Ответов 7
Метки нет (Все метки)

Всем привет!
Хочу определить в программе
C++
1
2
#define func(number)            { call(number, 0); }
#define func(number1, number2)  { call(number1, number2); }
Но по понятным причинам компилятор ругается на (macro redefinition)
Подскажите как обойти эту фигню

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2014, 17:50
Ответы с готовыми решениями:

Шаблонный метод с разными параметрами
Доброе утро, не получается сделать шаблонную магию - указывать полную...

Как автоматически создать несколько переменных с разными именами?
Товарищи программисты, есть строка с данными и в ней присутствуют точки,...

вычислить значения одной и той-же функции с разными значениями, в несколько потоков
Есть задача, вычислить значения одной и той-же функции с разными значениями,...

Программа осуществляющая вызов функции несколько раз с различными параметрами
Даны действительные числа s,t. Получить g(1.2s)+g(2s-1,st), где ...

Define внутри макро-функции
Возможно ли сделать в стиле: #define MY_MACRO( a, b ) \ # ifdef a ...

7
0x10
2561 / 1741 / 286
Регистрация: 24.11.2012
Сообщений: 4,365
23.04.2014, 17:53 #2
Avadd, Чем не угодила перегрузка функций?
0
Avadd
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 17
23.04.2014, 18:01  [ТС] #3
0x10, ну... в зависимости от других дефайнов эти макросы могут вырождаться в другие формы

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#define SOMETHING 10
 
#if SOMETHING == 10
#define func(number) { call(ololo); call(2); }
#endif
 
#if SOMETHING == 2
#define func(number) { call(ololo); }
#endif
 
#if SOMETHING == 0
#define func(number) { (void)0 }
#endif
Как-то так
0
0x10
2561 / 1741 / 286
Регистрация: 24.11.2012
Сообщений: 4,365
23.04.2014, 18:06 #4
Avadd, не аргумент, тела функций тоже можно заключать в блоки условной компиляции.
0
Avadd
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 17
23.04.2014, 18:27  [ТС] #5
Нашел такое решение
http://stackoverflow.com/questions/3...-with-c-macros
0
0x10
2561 / 1741 / 286
Регистрация: 24.11.2012
Сообщений: 4,365
23.04.2014, 18:40 #6
Может быть, оправдано для Си. Для С++ не вижу повода так извращаться.
0
Avadd
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 17
23.04.2014, 18:58  [ТС] #7
А как ты предлагаешь сделать для с++ вот это

C++
1
2
3
4
5
6
7
8
#if SOMETHING == 2
#define func(x)         { printf("%s value = %d\n", (__FILE__), (#x)); call(x)}
#define func(x,message)    { printf("%s. %s: value = %d\n", (__FILE__), message, (#x)); call(x) }
#endif
 
#if SOMETHING == 1
#define func(x)       { call(x); }
#endif
?

Вариант встраивать диагностические сообщения (printf чо-та там) в тело call не рассматриваются
0
0x10
2561 / 1741 / 286
Регистрация: 24.11.2012
Сообщений: 4,365
23.04.2014, 19:12 #8
А тут уже другой случай - используется специфичная для препроцессора фича - получение имени переменной в коде программы, что и мешает реализовать иначе.
1
23.04.2014, 19:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2014, 19:12

нужна зарезервированная макро константа для максимального значения unsigned int
Ребят, срочно нужна зарезервированная макро константа для максимального...

Нужно несколько раз запустить один .bat файл с разными параметрами.
Прошу помочь советом. Мне надо из VB appl (Windows NT)несколько раз запустить...

Конструктор с разными параметрами
...извините что обращаюсь, сам не местный...))) пробую создать обьект и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru