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

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

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

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

:: правила

:: новости

:: участники

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

:: форум

:: блоги

:: поиск

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

:: наш журнал

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

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

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

:: поддержка

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

Версия системы:
7.47 (16.04.2018)

Общие новости:
13.04.2018, 10:33

Форум:
16.07.2018, 10:05

Последний вопрос:
16.07.2018, 07:17

Последний ответ:
13.07.2018, 17:32

Последняя рассылка:
15.07.2018, 19:45

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

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

Наша кнопка:

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

Отзывы о нас:
11.12.2011, 09:07 »
Senibol
Спасибо за ответ. Но по-моему процессор из "старичков", хотя и производительнее моего Х3 430. [вопрос № 184727, ответ № 269096]
10.02.2011, 10:02 »
Вадим Исаев ака sir Henry
Большое спасибо! Благодаря Вам начал понимать, что такое "Кольцо". smile [вопрос № 182145, ответ № 265798]

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

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

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

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

CradleA
Статус: Профессор
Рейтинг: 102
solowey
Статус: Студент
Рейтинг: 87
mklokov
Статус: 6-й класс
Рейтинг: 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.18022 сек.

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