22.02.2019, 14:39 [+3 UTC]
в нашей команде: 3 402 чел. | участники онлайн: 6 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.69 (10.02.2019)
JS-v.1.33 | CSS-v.3.35

Общие новости:
10.02.2019, 21:59

Форум:
16.02.2019, 15:03

Последний вопрос:
22.02.2019, 13:03
Всего: 148810

Последний ответ:
22.02.2019, 12:34
Всего: 257821

Последняя рассылка:
22.02.2019, 13:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
20.09.2009, 17:41 »
Егоров Ярослав Владимирович
Огромное спасибо! Насколько я могу судить - решение абсолютно правильное. [вопрос № 172365, ответ № 254415]
16.09.2016, 23:35 »
Степанов Иван /REDDS
Обьяснил лучше чем учитель .Все идеально полностью совпадает с моим ходом решения. [вопрос № 189765, ответ № 274078]
13.10.2012, 11:56 »
Александ Васильевич Бок
Огромное спасибо! [вопрос № 186657, ответ № 271579]

РАЗДЕЛ • С / С++

Создание программ на языках C и C++.

[администратор рассылки: Андрей Кузнецов aka Dr_Andrew (Старший модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 772
solowey
Статус: Студент
Рейтинг: 322
zdwork
Статус: 1-й класс
Рейтинг: 111

Перейти к консультации №:
 

Консультация онлайн # 66348
Раздел: • С / С++
Автор вопроса: CjJoker
Отправлена: 10.12.2006, 14:21
Поступило ответов: 2

Доброго дня суток, эксперты.

Не подскажет ли кто:
Возможно ли выполнить строковую переменную, на пример:

AnsiString s = "ShowMessage("Hello? World!")";
в стиле #define s ShowMessage("Hello? World!")

извините за не правильную постановку вопроса ))))

Состояние: Консультация закрыта

Ответ # 131104 от V1s0r

Здравствуйте, CjJoker!

Хмм, надеюсь я тебя правильно понял :)))
Имя макро-функции EXEC_STR_PER - от балды, придумай что-нибудь получше

Если ты напишешь:
EXEC_STR_PER(s, ShowMessage("Hello? World!"))

то препроцессор подставит то, чего ты и хотел:
AnsiString s = "ShowMessage("Hello? World!")";

Только учти: минздрав предупреждает, что использование макросов может испортить нервы

Приложение:


Консультировал: V1s0r
Дата отправки: 11.12.2006, 16:44

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 131311 от John Paramol

Здравствуйте, CjJoker!
Хммм... Вам чтоли парсер нужен? Такой небольшой компилятор, заключенный в RUN_MACRO?
Ну если писать самому, на это могут уйти месяцы.
А если взять готовый, тоже придется повозиться.
Почитайте тут http://rsdn.ru/forum/Message.aspx?mid=1306051
Если же выражения для разбора всегда будут подобного рода (одна функция с одним параметром), и количество "узнаваемых" функций невелико, то тогда это легко сделать самому (никаких деревьев строить не надо). Ищите первую скобку, по ней разделяете имя функции от параметра, удаляете ненужные символы, в зависимости от имени функции передаете параметр в одну из реальных функций.
Успехов!


Консультировал: John Paramol
Дата отправки: 12.12.2006, 23:40

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 66348
CjJoker

# 1

= общий = | 12.12.2006, 12:55

Хм, че-то не работает 8-) На всякий случай привожу пример: { TStrings *s = new TStringList(); AnsiString A; if (FileExists(_PATH + "Setting.txt")) s->LoadFromFile(_PATH + "Setting.txt"); A = s->Values["DefaultAction"]; RUN_MACRO(A); // в этом месте надо выполнить ShowMessage("Hello? World!"); } Еще идеи есть???? :))))

CjJoker

# 2

= общий = | 13.12.2006, 13:36

Ув. John Paramol По идеи мне необходимо построить макрос а-ля: #define RUN_MACRO(Target_Function) Target_Function Хм, и задача вроде простая, но решений простых не предвидиться. Поставлю вопрос по другому: Необходимо подставить в макрос строковую функцию, или как убрать кавычки smile #define RUN_MACRO(Target_Function) "ShowMessage("Hello? World!")" не работает ((( #define RUN_MACRO ShowMessage("Hello? World!") работает // мне думаеться что это невозможно

John Paramol

# 3

= общий = | 15.12.2006, 09:52

Хм, вы меня еще больше запутали. Скажите, вам нужно следующее: AnsiString A = "Beep(1000,100)"; RUN_MACRO(A); // и в этом месте должно бибикнуть? Или нет?

CjJoker

# 4

= общий = | 16.12.2006, 09:51

>>Хм, вы меня еще больше запутали. Ага!!!! smile Только я еще больше запутаный ))))

John Paramol

# 5

= общий = | 16.12.2006, 14:17

'Ага', всмысле 'да'? Тогда, действительно, вам нужен парсер. Возможно, у вас перемешались представления о этапе трансляции и этапе выполнения программы. Строка "ShowMessage("Hello? World!")" это только область памяти, размером в 29 байт, в которой хранятся символы (причем даже без кавычек). Ничего больше. На этапе трансляции компилятор еще не знает, что эта строка собой представляет. Если вы хотите заставить эту строку выполняться, придется каким-то образом ее интерпретировать по ходу выполнения программы (этап выполнения), и совершать соответствующие действия. Надеюсь, понятно объяснил. А также, надеюсь, объяснил то, что требовалось.

CjJoker

# 6

= общий = | 17.12.2006, 15:37

Вот-вот, вот в этом то и вопрос как? Интерпретировать??

John Paramol

# 7

= общий = | 17.12.2006, 22:06

Уже создайте новую тему "как писать парсер". Вопрос объемный. А вообще-то я вас в самый первый раз послал куда надо, почему вы туда не сходили? (Я в хорошем смысле)

CjJoker

# 8

= общий = | 19.12.2006, 09:56

Фсем спасибо, понял ....

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.16341 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.69 от 10.02.2019
Версия JS: 1.33 | Версия CSS: 3.35