Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.013 c
15-1144155290
LordOfRock
2006-04-04 16:54
2006.04.23
Тормоза при копировании с CD


3-1141378241
ПТУ
2006-03-03 12:30
2006.04.23
Реализация локальной БД


15-1144225435
ocean
2006-04-05 12:23
2006.04.23
Перезагрузить ADSL-модем


3-1140955588
ViktorZ
2006-02-26 15:06
2006.04.23
Invalid Floating Point


4-1138885277
kilonet
2006-02-02 16:01
2006.04.23
перевод пикселей в DialogBaseUnits





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский