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

Вниз

{$i file} как грамотно пользоваться чтоб не возникал СПЕЦ ВОПРО   Найти похожие ветки 

 
Каспер ©   (2003-01-18 07:25) [0]

Кто нить пользуется этой директивой?


 
Юрий Зотов ©   (2003-01-18 07:42) [1]

Пользуется, почему же нет. Только не надо выносить в отдельный файл КУСКИ синтаксически ЦЕЛЬНЫХ конструкций (классов, record"ов и пр.). Хотя формальной ошибки в этом нет, но, увы, IDE не настолько умна, чтобы понимать такие штуки.

Стандартный пример использования $I - в отдельный файл выносятся директивы компилятора, а через $I они подключаются к юнитам. Таким образом, для изменения режима компиляции ВСЕХ модулей оказывается достаточно внести правки только в одном месте.

И когда НЕ нужно использовать $I. Например, все свои константы я вынес в отдельный модуль, а в других их использую. В этом случае мне нужно Uses, а не $I - иначе это будут РАЗНЫЕ константы, хотя и совпадающие. И будет дублирование кода.


 
Каспер ©   (2003-01-18 08:24) [2]

Ясно.
А насчет
Только не надо выносить в отдельный файл КУСКИ синтаксически ЦЕЛЬНЫХ конструкций (классов, record"ов и пр.). Хотя формальной ошибки в этом нет, но, увы, IDE не настолько умна, чтобы понимать такие штуки.

я так перевел что типа перед компиляцией компилятор выцепляет из инклуда все что туда вставлено как есть, а потом компилит.
:(
Жаль что все таки с классами облом вышел :(


 
Юрий Зотов ©   (2003-01-18 08:35) [3]

> перед компиляцией компилятор выцепляет из инклуда все что туда
> вставлено как есть, а потом компилит.

Почти так. Когда однопроходный компилятор доходит до $I то он просто начинает проход по включенному файлу. Получается, что текст этого файла как бы ФИЗИЧЕСКИ вставляется в то место, где стоит $I.


 
Каспер ©   (2003-01-18 08:44) [4]

а реально ли включить несколько проходов и поможет ли это?


 
Юрий Зотов ©   (2003-01-18 09:04) [5]

А как включить несколько проходов? Никак. Компилятор просто сделан однопроходным. Так уж он написан, вот и все.

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

А многопроходный компилятор может многое себе позволить. Например, он действительно может ФИЗИЧЕСКИ вставить в свой буфер текст из включенных файлов, более детально проанализировать исходный код (поскольку, в отличие от однопроходного, он "знает" не только то, что уже было в тексте, но и то, что будет в нем дальше) и т.д. Отсюда - эффективность машинного кода, но отсюда и сложность компилятора, его скорость, возможные баги в нем и пр.



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

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

Наверх




Память: 0.48 MB
Время: 0.015 c
3-86718
ikis
2003-01-09 18:12
2003.01.27
SQL-запрос на основе списка


1-86965
DDS
2003-01-17 10:03
2003.01.27
Я создаю VCL от Shape, что сделать, чтобы выполнялось OnClick


9-86617
Dead User
2002-07-23 11:41
2003.01.27
Проблема с вращением


3-86643
E_dimon
2003-01-03 22:49
2003.01.27
TUtil32.dll Исправление ошибок-Paradox


3-86714
anton2v
2003-01-09 17:46
2003.01.27
Работа с dbf альтернативой BDE