Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/34: Рейтинг темы: голосов - 34, средняя оценка - 4.97
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1

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

08.07.2012, 09:11. Показов 6902. Ответов 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
8489 / 6156 / 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
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru