Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
 Аватар для alexbmd
61 / 5 / 1
Регистрация: 03.06.2013
Сообщений: 355
Записей в блоге: 3

Как заМАКРОсить с темже именем (МАКРОС overload)

06.06.2019, 14:40. Показов 742. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как исхитриться с этим макросом, чтоб можножно было для одного имени S передавать или один или два аргумента
C++
1
2
3
4
5
6
7
8
#define S(x) printf("%s %s",(x),"OK")
#define S(x,y) printf("%s %s",(x),(y))
 
int main()
{
    S("AT");
    S("TA","KO");
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.06.2019, 14:40
Ответы с готовыми решениями:

Открытие разных страниц с данными из MySQL с одним и темже именем и паролем
Делая запрос к табл. MySQL из Php, мы подключаемся с помощью mysql_connect, где необходимо указать имя и пароль. Делая из этой страницы...

Макрос Сохранить Лист с именем из ячейки
Ребята, специалисты умоляю помогите!!!есть задача которую не могу решить уже несколько дней!!!!В програмировании я новичёк!!! задача у...

Макрос создания листов с определенным именем по циклу
Есть цикл, который по задумке должен давать название созданным листам с 1 и до 200(хотя листов, которые надо создать всегда меньше, я...

8
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
06.06.2019, 14:57
C++
1
2
3
4
5
6
7
8
#define SI(x, y, ...) printf("%s %s", (x), (y))
#define S(...) SI(__VA_ARGS__, "OK", "")
 
int main()
{
    S("AT");
    S("TA","KO");
}
1
 Аватар для eva2326
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,518
06.06.2019, 15:58
Цитата Сообщение от alexbmd Посмотреть сообщение
Как исхитриться с этим макросом, чтоб можножно было для одного имени S передавать или один или два аргумента
Дизайн и эволюция: перегрузка макросов


Только у него там ошибка в одном месте.
Никто даже не заметил)))
1
 Аватар для alexbmd
61 / 5 / 1
Регистрация: 03.06.2013
Сообщений: 355
Записей в блоге: 3
06.06.2019, 19:32  [ТС]
Croessmah , уау, даже "защита от дурка" ноль аргументов. спасибо
eva2326 , позновательно!

Добавлено через 40 минут
узнал также про ##__VA_ARGS__ тоже полезная штука...

но вот чтото никак не могу придумать следующую перезагрузку
C++
1
2
3
S(); //printf("%s %s","AT","OK")
S(x); //printf("%s %s",(x),"OK")  //у нас получается не сдвиг идёт как предложил Croessmah, а отсичение
S(x,y) //printf("%s %s",(x),(y))
возможно впринципе ?
0
 Аватар для alexbmd
61 / 5 / 1
Регистрация: 03.06.2013
Сообщений: 355
Записей в блоге: 3
07.06.2019, 12:09  [ТС]
Друзья подскажите как такую перезагрузку можно сделать
C++
1
2
3
4
5
6
7
#define S(...) printf("%s %s","AT","OK")
#define S(x) printf("%s %s",(x),"OK")  //у нас получается не сдвиг идёт как предложил Croessmah, а отсичение
#define S(x,y) printf("%s %s",(x),(y))
 
S(); 
S("AT");
S("AT","OK");
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.06.2019, 14:22
Цитата Сообщение от alexbmd Посмотреть сообщение
Друзья подскажите как такую перезагрузку можно сделать
Такую - никак. Нельзя объявлять макросы с одним именем, это не функции

Добавлено через 2 минуты
Вообще, через printf решать такую задачу - неблагодарное занятие. Сделай через std::cout
C++
1
2
3
4
5
6
7
8
9
10
11
void S()
{
    std::cout << std::endl;
}
 
template <typename T, typename... TT>
void S(T &&val, TT&&... vals)
{
   std::cout << val;
   S(std::forward<TT>(vals)...);
}
0
 Аватар для alexbmd
61 / 5 / 1
Регистрация: 03.06.2013
Сообщений: 355
Записей в блоге: 3
07.06.2019, 14:36  [ТС]
мне и не нужны макросы с одним именем. мне вызов нужен с одним именем. я просто для примера во что оно должно трансформироваться ...

вот Croessmah, предложил элегентнае решение перезагрузки, в теле программы у нас одно имя. Но там идёт (незнаю как правильно выразиться - сдвиг аргументов), мы такой макрос можем расширить и до трёх, десяти аргументов . можно ли что-то похожее сделать только "на отсичение" а не на сдвиг.


PS: printf там для понимании картины. не нужно на этом обострять внимание. суть вопроса в самом макросе/его аргументах
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.06.2019, 14:43
Цитата Сообщение от alexbmd Посмотреть сообщение
PS: printf там для понимании картины. не нужно на этом обострять внимание. суть вопроса в самом макросе/его аргументах
Как раз printf и портит понимание.
Обычно __VA_ARGS__ достаточно для макроса
0
 Аватар для alexbmd
61 / 5 / 1
Регистрация: 03.06.2013
Сообщений: 355
Записей в блоге: 3
07.06.2019, 15:01  [ТС]
вот что пытаюсь
C++
1
2
3
4
5
6
7
8
9
#define S(...) printf("%s %s","AT","OK")
#S S1
#define S1(x) printf("%s %s",(x),"OK")  //у нас получается не сдвиг идёт как предложил Croessmah, а отсичение
#S1 S2
#define S2(x,y) printf("%s %s",(x),(y))
 
S();  //print AT OK
S("TT");  //print TT OK
S("TT","KK"); //print TT KK
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.06.2019, 15:01
Помогаю со студенческими работами здесь

Макрос для сохранения документов в нужную папку с именем из текста
Имеется документ который нужно сохранить в нужную папку и с именем из текста этого документа (текст в таблице). Проблема в том, что в...

Макрос который при открытии файла сохраняет его с именем в ячейке c2
Макрос который при открытии файла сохраняет его с именем в ячейке c2 Application.DisplayAlerts = False ActiveWorkbook.SaveAs ...

Bash: как заменить все найденные файлы с именем 1 в папках A,B,C на файл с именем 2?
Поиск и открытие в Geany всех файлов с именем 'blablabla.php' из папки и вложенных папок откуда я запускаю терминал: find -name...

Записать в автоматическом режиме макрос, с заданным именем, описанием, клавиатурной комбинацией вызова и действиями
Имя макроса Строка Описание Позволяет выделить три подряд идущие в строку ячейки Клавиатурное сочетание Ctrl+y Действие ...

Закрытие всех активных книг с именем из переменной кроме той, из которой запускается макрос
Доброго времени суток! подскажите что не так делаю . Допустим открыто несколько книг(книга1 книга2 книга3). и &quot;Главная книга&quot;. в...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru