Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.23;
Скачать: CL | DM;

Вниз

макросы   Найти похожие ветки 

 
pavlov   (2006-04-07 11:32) [0]

Добрый день, господа!
Есть ли в дельфи такое понятие как макрос?
Или директива которая бы заставляла компилятор
подставлять в программу вместо самой функции
ее тело?


 
Palladin ©   (2006-04-07 11:35) [1]

Ctrl-Q A


 
Сергей М. ©   (2006-04-07 11:35) [2]


> Есть ли в дельфи такое понятие как макрос?


Вплоть до Д7 - точно нет.

В последующих версиях, кажется, inline в каком-то виде присутствует (я не в курсе деталей).


 
pavlov   (2006-04-07 11:46) [3]

>Ctrl-Q A

Оригинально :)
Только задача стоит не текст программы заменить,
а сформировать код на этапе компиляции

Например:
 for i:=0 to 999 do
 begin
   y:=Function(x);
 end;

Если Function() - простая функция, то в рантайме каждый раз при ее вызове
будет осуществляться запись регистров процессора, входных аргументов  в стек. А при возвращении из процедуры будет проделана обратная работа.
А если функция еще и в цикле, да 1000 раз вызовется. Сами понимаете.

А вот если бы это был макрос как в си то вместо Function() компилятор
подставил бы просто код функции а не саму функцию.


 
pavlov   (2006-04-07 11:47) [4]

Кстате
Ctrl-Q-A  = Ctrl-R


 
Юрий Иванов   (2006-04-07 11:50) [5]

Include вставляет текст из файла в данную точку текста программы при компиляции


 
pavlov   (2006-04-07 12:00) [6]

Да об этом я не подумал, спасибо.
Правда не очень красиво :)


 
Сергей М. ©   (2006-04-07 12:13) [7]


> Если Function() - простая функция, то в рантайме каждый
> раз при ее вызове
> будет осуществляться запись регистров процессора, входных
> аргументов  в стек


Не факт.
Смотря что подразумевается тобой под "простая функция".

См. calling conventions + asm statement


 
Deka ©   (2006-04-07 13:13) [8]

Как сказал Сергей, в последних версиях присутствует inline. Только надо выдержать массу условий, чтобы тело функции успешно вставилось в код. Функция изначально оформляетя стандартно и компилятор пытается встроить ее в код. Если не сможет вставит её вызов и сообщит о не возможности интеграции. Ну и от Include никуда не деться.



Страницы: 1 вся ветка

Текущий архив: 2006.04.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.035 c
2-1144448650
ctudent
2006-04-08 02:24
2006.04.23
TreeView+база данных


1-1142710002
Volf_555
2006-03-18 22:26
2006.04.23
Как скопировать текст в буффер обмена с минималь. размером файла?


15-1143900247
Новичоккк
2006-04-01 18:04
2006.04.23
Еще один вопрос про DLL


2-1144272382
in-tank
2006-04-06 01:26
2006.04.23
Как хранить данные для подсказок.


2-1144223180
Daimyo
2006-04-05 11:46
2006.04.23
помогите выбрать БД