15.10.2018, 19:21 [+3 UTC]
в нашей команде: 3 010 чел. | участники онлайн: 9 (рекорд: 21)

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

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

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.51 (29.09.2018)

Общие новости:
24.09.2018, 16:49

Форум:
14.10.2018, 19:20

Последний вопрос:
15.10.2018, 18:48

Последний ответ:
15.10.2018, 14:45

Последняя рассылка:
15.10.2018, 16:15

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

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

Наша кнопка:

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

Отзывы о нас:
06.02.2010, 18:35 »
Кадынцев Валерий Васильевич
Я понял, спасибо Вам! [вопрос № 176490, ответ № 259260]
03.04.2010, 08:15 »
Sherinu
Большое спасибо. Полностью удовлетворён. [вопрос № 177599, ответ № 260546]

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

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

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

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

Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 131
solowey
Статус: Студент
Рейтинг: 71
Андрей Кузнецов aka Dr_Andrew
Статус: Старший модератор
Рейтинг: 23

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

Консультация онлайн # 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

Посетитель

ID: 22408

# 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!"); } Еще идеи есть???? :))))


Посетитель

ID: 22408

# 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!") работает // мне думаеться что это невозможно


Посетитель

ID: 25074

# 3

= общий = | 15.12.2006, 09:52 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

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


Посетитель

ID: 22408

# 4

= общий = | 16.12.2006, 09:51 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

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


Посетитель

ID: 25074

# 5

= общий = | 16.12.2006, 14:17 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

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


Посетитель

ID: 22408

# 6

= общий = | 17.12.2006, 15:37 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

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


Посетитель

ID: 25074

# 7

= общий = | 17.12.2006, 22:06 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

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


Посетитель

ID: 22408

# 8

= общий = | 19.12.2006, 09:56 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

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

 

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

Яндекс Rambler's Top100

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

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

© 2001-2018, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.51 от 29.09.2018