Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1

Вывести значение макроса #define

08.07.2012, 09:11. Показов 6765. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Возникла проблема с #define.
Нужно каким-нибудь способом вывести на экран значение макроса #define типа этого:#
C++
1
define DLL_SPEC extern "C" __declspec(dllexport)
Этот макрос ни строковый ни числовой. Как вывести - непонятно.

Возможно ли его вывести на экран? Т.е. вывести строку:
C++
1
'extern "C" __declspec(dllexport)'
Значение макроса #define в коде может изменяться из-за других директив препроцессора и мне нужно узнать окончательное значение.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.07.2012, 09:11
Ответы с готовыми решениями:

Define внутри макроса
Подкажите возможно ли написать макрос кот. создаст #define? например: #define MACRO(name) #define NAME name знаю, что напрямую...

[C++] define как определение константы vs. макроса
На всякий случай. Это не константа, а макрос Начало здесь: https://www.cyberforum.ru/cpp-beginners/thread634990.html

[C++] Директива #define. В виде макроса определен шаблон функции.
Здравствуйте! Есть проблема и мне она непонятна! В программке присутствует директива #define в ней в виде макроса определен...

12
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
08.07.2012, 09:25
Возможно, так получится:
C++
1
2
3
#define MACROS_OUT(x) "x"
 
cout << MACROS_OUT(DLL_SPEC);
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
08.07.2012, 09:32  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
Возможно, так получится:
C++
1
2
3
#define MACROS_OUT(x) "x"
 
cout << MACROS_OUT(DLL_SPEC);
К сожалению выводится: 'x', а не 'extern "C" __declspec(dllexport)'
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
08.07.2012, 09:45
Пардон, макрос с кавычками несколько иначе работает... вот так должно прокатить:
C++
1
2
3
#define MACROS_OUT(x) #x
 
cout << MACROS_OUT(DLL_SPEC);
Добавлено через 1 минуту
Одна только вот засада - "C" - эти кавычки не дадут нормально вывести...

Добавлено через 3 минуты
Вот конечный вариант:
C++
1
2
3
4
#define MACROS_OUT(x) #x
#define C "\""#C"\""
cout << MACROS_OUT(DLL_SPEC);
#undef C
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
08.07.2012, 10:18  [ТС]
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Цитата Сообщение от BRcr Посмотреть сообщение
Вот конечный вариант:
C++
1
2
3
4
#define MACROS_OUT(x) #x
#define C "\""#C"\""
cout << MACROS_OUT(DLL_SPEC);
#undef C
К сожалению, опять не то выводится, точнее выводится "DLL_SPEC"

Но решение все же нашел:
C++
1
2
3
4
5
6
#define DLL_SPEC extern "C" __declspec(dllexport)
 
#define STRINGIFY(x) #x
#define TOSTRING(x)  STRINGIFY(x)
 
cout << TOSTRING(DLL_SPEC);
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
08.07.2012, 10:24
Да, с засадой это я зря... оказывается, такая форма записи макроса:
C++
1
#define MACROS_OUT(x) #x
автоматически зеркалит символы " и \
Так что нужды в дополнительном форматировании нет.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
21.02.2014, 20:30  [ТС]
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Оказывается, есть проще способ:
C++
1
#pragma message DLL_SPEC
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
22.02.2014, 11:54
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Оказывается, есть проще способ:
Этот способ не переносимый, в отличие от варианта из поста #4
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
22.02.2014, 12:33  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Этот способ не переносимый, в отличие от варианта из поста #4
вариант из поста #4 - нерабочий, рабочий вариант написан в посте #5.
и тут вообще-то раздел C++ Builder.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
22.02.2014, 12:56
Цитата Сообщение от kzru_hunter Посмотреть сообщение
вариант из поста #4 - нерабочий
Промахнулся, пост #5

Цитата Сообщение от kzru_hunter Посмотреть сообщение
и тут вообще-то раздел C++ Builder
Но всегда полезно понимать, что есть переносимые решения, а есть и не переносимые. Ты может это и понимаешь, а другие, которые будут читать - могут и не понимать
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.02.2014, 21:57
Цитата Сообщение от kzru_hunter Посмотреть сообщение
мне нужно узнать окончательное значение.
А головой подумать что "подставится", не ?
Кроме того можно запускать только препроцессор без компиляции и смотреть что получается.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
22.02.2014, 22:40  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
А головой подумать что "подставится", не ?
в случае с DLL_SPEC понятно что подставится, а в других случаях бывает не просто определить.
Цитата Сообщение от Avazart Посмотреть сообщение
Кроме того можно запускать только препроцессор без компиляции и смотреть что получается.
Интересно, как? Не попадалась мне на глаза такая фича в билдере.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
22.02.2014, 23:08
Было так:

В C++ Builder 2007 на файле в списке исходников можно нажать правую кнопку и далее выбрать "Preprocess". Потарахтев несколько секунд, в списке исходников родится ещё один файл с расширением .i - это и есть препроцессированный текст
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.02.2014, 23:08
Помогаю со студенческими работами здесь

Как реализовать директиву #define для создания шаблона отпределения #define ?
Здравствуйте уважаемые. При написании программы появилась необходимость задать шаблон создания #define через #define (извините за...

Скрытие столбцов. Ошибка App-define od obj-define error
Привет) помогите, пожалуйста, ответить на следующие вопросы: 1) выскакивает ошибка: App-define od obj-define error - как бы найти ее...

Как вернуть значение из макроса?
Как сделать стобы из макроса возвращалось значение? #include &quot;stdio.h&quot; int main(void) { #define mac(a,b)\ for (int...

Как подставить значение макроса в строку?
При использовании макросов-констант препроцессора иногда возникает надобность подставлять их значения в строковые литералы программы для...

Изменить значение формулы с помощью макроса
Работаю с большим штатом, после добавлено в штат еще 1 позиции вся таблица считаеться неправильно, в каждую формулу теперь надо добавить +1...


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

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

Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru