![]() |
|
Модераторы: volvo877, Snowy, MetalFan |
![]()
|
|
| Fedor |
|
||||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: нет Всего: 32 |
Использование директив компилятора в программе
Взято из справочной системы Borland Pascal 7.0 Директивы компилятора - это комментарии со специальным синтаксисом. Они могут использоваться везде, где разрешены комментарии. Директивы компилятора имеют следующий вид: - Начинаются со знаков "{$" или "(*$" - Сопровождаются именем директивы - Заканчиваются знаками "}" или "*)" Например:
Директивы компилятора делятся на три класса: 1) Переключатели - Включают и выключают возможности компилятора, когда вы ставите знак "+" или "-" после имени директивы. 2) Параметры - Определяют параметры, которые воздействуют на компиляцию. 3) Условные директивы - Управляют условной компиляцией частей исходного текста. Переключатели Переключательные директивы включают и выключают возможности компилятора. Они могут быть локальными или глобальными. - Локальные директивы могут находиться где-нибудь в теле программы. Они влияют только на часть компиляции. - Глобальные дирктивы должны находиться перед разделом описаний программы или модуля. Они влияют на всю компиляцию. $A: Выравнивание данных ------------------------ Переключает между байтовым выравниванием и выравниванием по словам переменных и типизированных констант. Синтаксис: {$A+} или {$A-} Значение по умолчанию: {$A+} Тип: Глобальная Команда меню: Options|Compiler|Align Data Замечания: Выравнивание по словам не дает эффекта на процессорах 8088. На всех процессорах 80x86 выравнивание по словам задает более быстрое выполнение. - К данным размера "слово" (2 байта) по четным адресам можно обратиться за один цикл памяти. - К данным на нечетных адресах можно обратиться за два цикла памяти. Состояние $A+: В состоянии $A+, все переменные и типизированные константы размером больше 1-го байта располагаются по четным адресам. При необходимости, между переменными могут быть вставлены неиспользуемые байты, для достижения выравнивания по словам. Режим $A+ не влияет на переменные размером 1 байт, поля записей или элементы массивов. Поле в записи будет выровнено по словам только в том случае, если полный размер всех полей до него является четным. Чтобы каждый элемент массива был выровнен по словам, размер элементов массива должен быть четным. Состояние $A-: В состоянии $A-, выравнивание не происходит. Переменные и типизированные константы просто помещаются в следующий доступный адрес памяти, независимо от их размера. ВНИМАНИЕ: Независимо от состояния $A, каждый раздел описания глобальных переменных и констант всегда начинается на границе слов. Компилятор всегда хранит указатель вершины стека (SP) выровненным по словам, рапределяя дополнительный неиспользуемый байт в записи активации процедуры если это требуется. $B: Булева оценка ------------------ Переключает между двумя различными моделями генерации объектного кода для булевых операторов AND и OR. Синтаксис: {$B+} или {$B-} Значение по умолчанию: {$B-} Тип: Локальная Команда меню: Options|Compiler|Boolean Evaluation Состояние $B+: В состоянии $B+, компилятор генерирует код для полной булевой оценки выражения. Это означает, что каждый операнд булева выражения, созданного при помощи операторов AND и OR, будет оценен, даже в том случае, если результат всего выражения уже известен. Состояние $B-: В состоянии $B-, компилятор генерирует код с короткой схемой оценки булевого выражения. Это означает, что оценка выражения прекращается, как только результат всего выражения становится очевидным. $D: Отладочная информация -------------------------- Включает или выключает генерацию отладочной информации. Синтаксис: {$D+} или {$D-} Значение по умолчанию: {$D+} Тип: Глобальная Команда меню: Options|Compiler|Debug Information Замечания: Отладочная информация состоит из таблицы номеров строк для каждой процедуры. В таблице записаны соответствия адресов объектного кода номерам строк исходного текста. Когда отладочная информация включена для данной программы или модуля, вы можете использовать автономный или интегрированный отладчики Borland для пошагового выполнения и установки контрольных точек в этом модуле. Если в модуле или программе, компилируемых в состоянии {$D+}, происходит ошибка времени выполнения, Turbo Pascal автоматически переходит к оператору, который вызвал ошибку. Смотри Search|Find Error для информации относительно автоматического поиска ошибок. Переключатель Options|Linker|Map File производит информацию для данного модуля только в том случае, если он компилировался в состоянии $D+. Для модулей, отладочная информация записывается в TPW, TPP или TPU файл вместе с объектным кодом. Отладочная информация увеличивает размер TPU, TPW и TPP файлов и занимает дополнительное место в памяти при компиляции программ, использующих модуль, но она не влияет на размер или быстродействие самой программы. Переключатель Debug Information обычно используется вместе с переключателем Local Symbols. ВНИМАНИЕ: Если вы хотите использовать для отладки вашей программы Turbo Debugger for Windows, включите опцию Options|Linker|Debug Info in EXE или установите следующие опции: Compile|Destination -> Disk Options|Debugger, Debuuging -> Standalone $E: Эмуляция 80x87 ------------------- Включает или выключает компоновку библиотеки программной эмуляции 80x87 в EXE файл. Синтаксис: {$E+} или {$E-} Значение по умолчанию: {$E+} Тип: Глобальная Команда меню: Options|Compiler|[X] Emulation Режим: Real, Protected Директива $E включает или выключает компоновку библиотеки эмуляции математического сопроцессора 80x87, при его отсутствии. Состояние {$N+, E+}: Когда вы компилируете программу в состоянии {$N+, E+}, компилятор компонует программу с полным эмулятором 80x87. Возникающий в результате EXE файл может быть выполнен на любой машине, независимо от того, имеет ли она сопроцессор или нет. Если сопроцессор присутствует, то программа использует его, иначе, сопроцессор эмулируется соответствующей библиотекой поддержки. Состояние {$N+, E-}: В состоянии {$N+, E-}, компилятор компонует программу с меньшей библиотекой поддержки чисел с плавающей точкой, которая может использоваться только в том случае, если во время выполнения программы присутствует сопроцессор. Состояние переключателя {$E} не имеет никакого значения, если он используется в модуле. Этот переключатель применяется только при компиляции программ. Состояние {$N-, E+} Если программа компилируется в состоянии {$N-}, и все модули, используемые программой компилировались в состоянии {$N-}, то библиотека поддержки 80x87 не требуется, и состояние переключателя {$E} игнорируется. $F: Дальний тип вызова ----------------------- Задает модель вызова, используемую для последовательно компилируемых процедур и функций. Синтаксис: {$F+} или {$F-} Значение по умолчанию: {$F-} Тип: Локальная Команда меню: Options|Compiler|Force Far Calls Состояние $F+: Процедуры и функции, компилируемые в состоянии $F+ всегда используют модель дальнего (FAR) вызова. Состояние $F-: В состоянии $F-, компилятор автоматически выбирает соответствующую модель: - FAR, если процедура или функция объявлена в разделе интерфейса модуля - NEAR, если процедура или функция объявлена где-либо еще ВНИМАНИЕ: Для программ, использующих оверлеи, поставьте директиву $F+ в начале программы и каждого модуля, чтобы удовлетворить требованию дальнего вызова. Для программ, использующих процедурные переменные, все эти процедуры должны использовать далекую (FAR) модель кода.
$G: Генерация инструкций 80x286 -------------------------------- Включает или выключает генерацию объектного кода для 286-х процессоров. Синтаксис: {$G+} или {$G-} Значение по умолчанию: {$G-} для реального режима {$G+} для защищенного режима и среды Windows Тип: Глобальная Команда меню: Options|Compiler|286 Instructions Состояние $G-: В состоянии $G- генерируются только основные инструкции процессора 8086. Программы, компилируемые в этом состоянии можно выполнять на любом процессоре семейства 80x86. Состояние $G+: В состоянии $G+, компилятор использует дополнительные команды процессора 80286 для улучшений генерации объектного кода. Программы, компилируемые в этом состоянии нельзя выполнять на процессорах 8088 и 8086. Дополнительные команды, используемые в режиме $G+ включают: - ENTER - LEAVE - PUSH непосредственное значение - Расширенная IMUL - Расширенная SHL - Расширенная SHR ВНИМАНИЕ: (Для Windows), если программа или библиотека или любой модуль, используемый программой или библиотекой, компилируется в состоянии {$G+}, то в заголовке возникающего в результате EXE или DLL будет установлен флаг защищенного режима, и Windows не будет выполнять его в реальном режиме. $I: Проверка ввода/вывода -------------------------- Включает или выключает автоматическую генерацию объектного кода, которая проверяет результат обращения к процедуре ввода/вывода. Синтаксис: {$I+} или {$I-} Значение по умолчанию: {$I+} Тип: Локальная Команда меню: Options|Compiler|I/O checking Замечания: Если процедура ввода/вывода возвращает ненулевой результат ввода/вывода, когда переключатель $I включен, то программа завершается и выводится сообщение об ошибке времени выполнения. Если переключатель $I выключен, то вы должны использовать функцию IOResult для проверки ошибок ввода/вывода. $K: Подпрограммы повторного вызова ----------------------------------- Управляет порождением повторных вызовов для процедур и функций, экспортируемых приложением. Синтаксис: {$K+} или {$K-} Значение по умолчанию: {$K+} Тип: Глобальная Команда меню: Options|Compiler|Smart callbacks Режим: Windows Замечания: Когда приложение компилируется в состоянии $K-, необходимо использовать подпрограммы API Windows MakeProcInstance и FreeProcInstance при создании подпрограмм повторного вызова. В состоянии $K+, нет необходимости использовать MakeProcInstance и FreeProcInstance. $L: Информация о локальных символах ------------------------------------- Включает или выключает генерацию информации о локальных символах. Синтаксис: {$L+} или {$L-} Значение по умолчанию: {$L+} Тип: Глобальная Команда меню: Options|Compiler|Local symbols Замечания: Информация о локальных символах состоит из: - Символов в части реализации модуля (имен и типов всех локальных переменных и констант модуля) - Символов внутри процедур и функций модуля Когда опция "Local symbols" включена, вы можете использовать автономный или интегрированный отладчик для проверки и изменения значений локальных переменных модуля или программы. Вызовы процедур и функции модуля могут быть исследованы через окно View|Stack или с помощью команды Debug|Call Stack. Опция Options|Linker|Map File производит информацию о локальных символах данного модуля только в том случае, если этот модуль компилировался в состоянии $L+. Для модулей, информация о локальных символах записывается в файл модуля вместе с объектным кодом модуля. Информация о локальных символах увеличивает размер файла модуля и занимает дополнительную область памяти при компиляции программ, использующих модуль. Она не влияет на размер или на быстродействие готовой программы. Этот переключатель обычно используется совместно с переключателем отладочной информации $D. ВНИМАНИЕ: директива $L игнорируется, если отладочная информация выключена {$D-}. $N: Математический сопроцессор ------------------------------- Переключает между двумя различными моделями генерации объектного кода обработки чисел с плавающей точкой, обеспечиваемыми компилятором. Синтаксис: {$N+} или {$N-} Значение по умолчанию: {$N-} Тип: Глобальная Команда меню: Options|Compiler|8087/80287 Состояние $N-: В состоянии $N-, компилятор генерирует код для выполнения всех вещественных вычислений программно, вызывая подпрограммы библиотеки поддержки. Состояние $N+: В состоянии $N+, компилятор генерирует код для выполнения всех вещественных вычислений с использованием математического сопроцессора 80x87 и дает вам доступ к четырем дополнительным вещественным типам: Single, Double, Extended и Comp. ВНИМАНИЕ: Вы можете также использовать директиву $E+, чтобы эмулировать 80x87. Это дает вам доступ к вещественным типам при отсутствии 80x87 сопроцессора. $O: Генерация оверлейного кода ------------------------------- Включает и выключает генерацию оверлейного объектного кода. Синтаксис: {$O+} или {$O-} Значение по умолчанию: {$O-} Тип: Глобальная Команда меню: Options|Compiler|[X] Overlays allowed Режим: Real Состояние {$O+} В состоянии {$O+}, генератор объектного кода принимает специальные меры предосторожности при передаче строковых и наборных констант из одной оверлейной процедуры или функции в другую. Использование директивы {$O+} в модуле не вынуждает вас делать его оверлейным, но компилятор позволяет модулю быть оверлейным только в том случае, если он компилировался в режиме {$O+}. Если вы создаете модули, которые планируете использовать и в оверлейных, и в не-оверлейных приложениях, то компилируйте их в режиме {$O+}, что гарантирует, что вы можете использовать один и тот же модуль в разных типах приложений. ВНИМАНИЕ: директива компилятора {$O} почти всегда используется с директивой {$F+}, чтобы удовлетворить требованию дальнего (FAR) типа вызова менеджера оверлеев. $P: Открытые строковые параметры --------------------------------- Управляет значением переменных параметров, объявленных с использованием зарезервированного слова String. Синтаксис: {$P+} или {$P-} Значение по умолчанию: {$P-} Тип: Глобальная Команда меню: Options|Compiler|Open parameters Состояние $P-: В состоянии $P-, переменные параметры, объявленные с помощью ключевого слова String являются нормальными переменными параметрами. Это обеспечивает совместимость с более ранними версиями Turbo Pascal. Состояние $P+: В состоянии $P+, переменные параметры, объявленные с помощью ключевого слова String являются открытыми строковыми параметрами. Независимо от состояния директивы $P, для объявления открытых строковых параметров может использоваться идентификатор OpenString. Фактическим параметром открытого строкового параметра может быть переменная любого строкового типа, и, внутри процедуры или функции, атрибут максимальной длины формального параметра будет таким же, как и у фактического параметра. $Q: Проверка переполнения -------------------------- Управляет генерацией кода проверки переполнения. Синтаксис: {$Q+} или {$Q-} Значение по умолчанию: {$Q-} Тип: Локальная Команда меню: Options|Compiler|Overflow checking Состояние $Q+: В состоянии $Q+, некоторые целочисленные операции проверяются на переполнение, например: +, -, *, Abs, Sqr, Succ и Pred Код для каждой из этих арифметических операций сопровождается дополнительным кодом, который проверяет, находится ли результат внутри обеспечиваемого диапазона. Если проверка переполнения не выдерживается, то программа завершается и выводится сообщение об ошибке времени выполнения. Обратите внимание, что {$Q} не влияет на стандартные процедуры Inc и Dec. Эти процедуры никогда не проверяются на переполнение. Переключатель $Q обычно используется вместе с переключателем $R. Включение проверки переполнения замедляет вашу программу и делает ее больше, так что используйте {$Q+} только для отладки. Состояние $Q-: В состоянии $Q- проверка переполнения не производится. $R: Проверка диапазона ----------------------- Включает и выключает генерацию кода проверки диапазона. Синтаксис: {$R+} или {$R-} Значение по умолчанию: {$R-} Тип: Локальная Команда меню: Options|Compiler|Range Checking Состояние $R+: В состоянии $R+: - Все индексы массивов и строк проверяются на принадлежность допустимым пределам - Все присваивания скалярным и поддиапазонным переменным проверяются на принадлежность заданным диапазонам Если проверка принадлежности диапазону не выдерживается, то программа завершается и выводится сообщение об ошибке времени выполнения. $R+ не влияет на процедуры Inc и Dec. Включение проверки диапазона замедляет вашу программу и делает ее больше. Используйте эту опцию при отладке, затем выключите ее, если уверены, что в вашей программе нет ошибок. $S: Проверка переполнения стека -------------------------------- Включает и выключает генерацию кода проверки переполнения стека. Синтаксис: {$S +} или {$S-} Значение по умолчанию: {$S +} Тип: Локальный Команда меню: Options|Compiler| Проверка стека Состояние $S+: В состоянии $S+, компилятор генерирует специальный код в начале каждой процедуры или функции для проверки, достаточно ли места в стеке для локальных переменных и другой временной памяти. Когда в стеке недостаточно свободного места, вызов процедуры или функции, компилируемых в режиме $S+ заставляет программу завершиться и вывести сообщение об ошибке времени выполнения программы. Состояние $S-: Когда в стеке недостаточно свободного места, вызов процедуры или функции, вероятно, вызовет сбой системы. $T: Проверка типов указателей ------------------------------ Управляет типами указателей, созданных оператором @. Синтаксис: {$T+} или {$T-} Значение по умолчанию: {$T-} Тип: Локальная Команда меню: Options|Compiler|Typed @ operator Состояние $T-: В состоянии $T-, тип результата оператора @ - всегда нетипизированный указатель. Состояние $T+: Когда оператор @ применяется к переменной в состоянии $T+, тип результата - ^T, где T совместим только с другими указателями на данный тип переменной. $V: Проверка строковых параметров ---------------------------------- Управляет проверкой типов строк, переданных как переменные параметры. Синтаксис: {$V+} или {$V-} Значение по умолчанию: {$V +} Тип: Локальная Команда меню: Options|Compiler|Strict var-strings Состояние $V+: В состоянии $V+, выполняется строгий контроль соответствия типов, чтобы формальные и фактические параметры имели идентичные строковые типы. Состояние $V-: В состоянии $V-, любая переменная со строковым типом позволяется как фактический параметр, даже если объявленная максимальная длина не такая же как и у формального параметра. Хотя $V- все еще поддерживается, вы должны использовать открытые строковые параметры. $W: Область стека Windows -------------------------- Генерирует специальные пролог- и эпилог- коды для дальних процедур и функций. Синтаксис: {$W+} или {$W-} Значение по умолчанию: {$W +} Тип: Локальная Команда меню: Options|Compiler|Windows stack frames Режим: Windows Состояние $W+: В состоянии $W+, компилятор генерирует специальный код входа и выхода для дальних процедур и функций. Этот код дает возможность менеджеру памяти реального режима Windows правильно идентифицировать дальние записи активации, когда он корректирует цепочку вызовов после перемещения сегмента кода или данных. Состояние $W-: В состоянии $W-, компилятор не генерирует такого кода. Отключите эту опцию, если ваша программа выполняется только в стандартном режиме Windows или только в расширенном режиме Windows 386. $X: Расширенный синтаксис -------------------------- Включает или выключает расширенный синтаксис Turbo Pascal. Синтаксис: {$X+} или {$X-} Значение по умолчанию: {$X+} Тип: Глобальная Команда меню: Options|Compiler|Extended syntax Состояние $X+: В состоянии $X+, функции могут использоваться как простые операторы - результат функции может быть отброшен. Вообще, вычисления, выполняемые функцией представляются ее результатом, так что немного смысла его отбрасывать. Однако, в некоторых случаях, функция может выполнять несколько операций, основываясь на параметрах. В некоторых из этих случаев она может не производить результат. В таких случаях, $X+ позволяет обрабатывать функцию как процедуру. Директива $X+ не относится ко встроенным функциям (функциям, определенным в модуле System). Режим $X+ также включает поддержку строк с заверщающим нулем, активизируя специальные правила, относящиеся ко встроенному типу PChar и нуль-основанным символьным массивам. Смотри модуль Strings для подробной информации. Состояние $X-: В заданном по умолчанию состоянии $X-, расширенный синтаксис выключен. Попытка использовать его вызовет ошибку. $Y: Информация о символах -------------------------- Включает или выключает генерацию информации о ссылках на символы. Синтаксис: {$Y+} или {$Y-} Значение по умолчанию: {$Y+} Тип: Глобальная Команда меню: Options|Compiler|Symbol information Информация о ссылках на символы состоит из таблиц, в которых находятся номера строк всех объявлений и ссылок на символы модуля. Состояние $Y+: Состояние $Y+ включает генерацию информации о ссылках на символы. Информация о ссылках на символы для модулей записывается в TPU, TPP или TPW файле вместе с объектным кодом модуля. Информация о ссылках на символы увеличивает размер TPU, TPP или TPW файлов, но не влияет на размер или быстродействие готовой программы, использующей данный модуль. Переключатель $Y не дает эффекта, если выключены переключатели $D и $L. Состояние $Y-: В состоянии $Y-, генерация информации о ссылках на символы выключена. Это сообщение отредактировал(а) Fedor - 17.4.2005, 20:23 -------------------- Мы - Днепряне. Мы всех сильней. |
||||
|
|||||
| SPrograMMer |
|
||||
![]() Спамер :) ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 5.11.2004 Где: Краснодар Репутация: нет Всего: 6 |
Ну сюда же наверное можно было бы добавить и про директивы компиляции:
forward - указывает, что текст данной процедуры помещен ниже.Наример:
В случае косвенной рекурсии типа A->B->A использование этой директивы становится обязательным, т к каждая единица программы олжна быть описана до своего вызова:
exernal - директива для связывания отдельно оттранслированных процедур и функций, написанных на языке ассмблера; inline - для записи вместо блока операторов инструкций в машинном коде; interrupt - для программ обрабатывающие прерывания Dos ну а про Far ты уже сказал... -------------------- животное = зверь законченный гентушник |
||||
|
|||||
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: нет Всего: 32 |
Это еще не конец... Продолжение будет следовать
-------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| SPrograMMer |
|
|||
![]() Спамер :) ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 5.11.2004 Где: Краснодар Репутация: нет Всего: 6 |
Да и есчо: условная компиляция. В эту тему или отдельно?
-------------------- животное = зверь законченный гентушник |
|||
|
||||
| SPrograMMer |
|
|||
![]() Спамер :) ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 5.11.2004 Где: Краснодар Репутация: нет Всего: 6 |
Sorry... по горячился -------------------- животное = зверь законченный гентушник |
|||
|
||||
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: нет Всего: 32 |
Параметры
---------- Директивы параметров определяют параметры, которые влияют на компиляцию программы. Директива Значение $C Атрибут Атрибут сегмента кода $D Текст Описание $I ИмяФайла Файл для включения $G ИмяМодуля Группа модулей в сегменте $L ИмяФайла Компоновать объектный файл $M Стек, Куча Размеры распределения памяти $O ИмяМодуля Имя оверлейного модуля $R ИмяФайла Файл с ресурсами $S РазмерСегмента Размер сегмента Между именем директивы и параметрами должен находиться хотя бы один пробел. Например: {$I TYPES.INC} {$O MYUNIT} $C: Атрибут сегмента кода -------------------------- Управляет атрибутами сегмента кода. Синтаксис: {$C атрибут атрибут} Значение по умолчанию: {$C MOVEABLE DEMANDLOAD DISCARDABLE} Тип: Глобальная Режим: Windows, Protected Замечания: Каждый сегмент кода в приложении или библиотеке имеет набор атрибутов, которые определяют его поведение, когда он загружается в память. Директива $C влияет только на сегмент кода модуля, программы или библиотеки в которых она помещена. Атрибуты сегмента кода разбиты на группы по два в каждой. Каждая опция имеет противоположную ей опцию: Опция Значение MOVEABLE Система может изменять расположение сегмента кода в памяти. FIXED Система не может изменять расположение сегмента кода в памяти. PRELOAD Сегмент кода загружается при запуске программы. DEMANDLOAD Сегмент кода загружается только при необходимости. PERMAMENT Сегмент кода остается в памяти всегда, после загрузки. DISCARDABLE Сегмент кода может быть выгружен из памяти, если он больше не нужен. Если определены обе опции, только последняя будет иметь значение. Например запись {$C FIXED MOVEABLE DISCARDABLE} создаст сегмент кода с атрибутами MOVEABLE и DISCARDABLE. $D: Описание ------------- Вставляет указанный текст в раздел описания в заголовке EXE или DLL файлов. Синтаксис: {$D Текст} Тип: Глобальная Режим: Windows, Protected $I: Файл для включения ----------------------- Указывает компилятору включить указанный файл в компиляцию. Синтаксис: {$I Имя_файла} Тип: Локальная Замечания: Заданное по умолчанию расширение для файла - PAS Если Имя_файла не определяет каталог, то IDE ищет - Сначала в текущем каталоге - Затем в каталогах, определенных в строке ввода Options|Directories|Include directories (или в каталогах, которые вы определили в опции /I в командной строке при запуске TPC) Включаемый файл вставляется в компилируемый текст сразу после директивы $I. Вы можете использовать 15 уровней вложенных файлов. ВНИМАНИЕ: Файл для включения не может быть определен в середине операторной части. Все операторы между словами Begin и End операторной части должны находиться в одном и том же исходном файле. Директива $G: Группа модулей в сегменте ---------------------------------------- Определяет группу модулей, которые компоновщик должен поместить в один и тот же сегмент. Синтаксис: {$G ИмяМодуля, ИмяМодуля ...} Тип: Локальная Режим: Windows, Protected Замечания: Директива $G определяет группу модулей, которые компоновщик должен поместить в один и тот же сегмент. Группировка модулей в одном и том же сегменте гарантирует, что модули загружаются и выгружаются из памяти в одно и то же время. Директива $G используется прежде всего для группировки модулей, содержащих неиспользуемые данной программой части кода. Каждая директива $G определяет группу модулей. Директивы $G допустимы только в программе или библиотеке, и должны находиться после зарезервированного слова Uses. Компилятор сообщает об ошибке, если вы пытаетесь добавить модуль в более, чем одну группу. В дополнение к любым группам, созданным с помощью директивы $G, компилятор поддерживает заданную по умолчанию группу, которая включает все модули, сгруппированные неявно. Компоновщик минимизирует число сегментов кода в исполняемом файле, объединяя все модули, которые принадлежат одной и той же группе. Два или более модуля помещаются в один и тот же сегмент кода, если они принадлежат одной группе и имеют одни и те же атрибуты сегмента кода, и если их общий размер не превышает выбранный размер сегмента. Компоновщик никогда не будет помещать модули, принадлежащие разным группам, в один и тот же сегмент кода. $L: Компоновать объектный файл ------------------------------- Указывает компилятору компоновать заданный файл вместе с программой или модулем. Синтаксис: {$L Имя_файла} Тип: Локальная Замечания: Директива $L используется для компоновки с основной программой кода, написанного на ассемблере для подпрограмм, объявленных внешними. Указанный файл должен быть переместимым объектным файлом Intel (файл *.OBJ). Заданное по умолчанию расширение для файла - OBJ Если Имя_файла не определяет каталог, то IDE ищет - Сначала в текущем каталоге - Затем в каталогах, определенных в строке ввода Options|Directories|Object directories. $M: Размеры распределения памяти --------------------------------- Определяет параметры распределения памяти. Синтаксис: {$M размер_стека, размер_кучи} Значения по умолчанию: {$M размер_стека, размер кучи} (Windows) {$M размер_стека} (Защищенный режим DOS) {$M размер_стека, начало_кучи, конец_кучи} (Реальный режим DOS) Тип: Глобальная Команда меню: Options|Compiler|Memory sizes Директива $M определяет параметры распределения памяти для приложения или библиотеки. Параметр "размер_стека" должен быть целым числом в диапазоне от 1024 до 65520, что определяет размер сегмента стека. Для реального режима DOS, параметры "начало_кучи" и "конец_кучи" определяют минимальный и максимальный размеры кучи, соответственно. Параметр "начало_кучи" должен быть в диапазоне от 0 до 655360, а параметр "конец_кучи" должен быть в диапазоне от "начало_кучи" до 655360. Для Windows, параметр "размер_кучи" определяет размер локальной области кучи в сегменте данных. Параметр "размер_кучи" должен быть целым числом в диапазоне от 0 до 65520. ВНИМАНИЕ: Директива $M не дает эффекта, когда используется в модуле. Параметр "размер_стека" игнорируется в библиотеке (библиотека всегда использует стек приложения, которое ее вызывает). $O: Имя оверлейного модуля --------------------------- Записывает модуль в файл оверлеев. Синтаксис: {$O Имя_модуля} Тип: Локальная Режим: Real Когда вы компилируете программу, директива {$O Имя_модуля} определяет, какой из модулей, используемых программой должен быть помещен в OVR файл вместо EXE файла. Директивы {$O Имя_модуля} должны находиться после раздела Uses программы. Директива {$O Имя_модуля} не дает эффекта, если используется в модуле. Компилятор сообщает об ошибке, если вы пытаетесь записать в оверлейный файл модуль, который не компилировался в режиме {$O+}. Любой модуль, описанный в директиве {$O Имя_модуля}, должен компилироваться со включенной опцией Overlays allowed (в диалоговом окне Options|Compiler). $R: Файл с ресурсами --------------------- Определяет имя ресурсного файла, который будет включен в приложение или библиотеку. Синтаксис: {$R Имя_файла} Тип: Локальная Режим: Windows, Protected Замечания: Заданное по умолчанию расширение для файла - RES. Это должен быть файл ресурсов Windows. Если Имя_файла не определяет каталог, то компилятор ищет - Сначала в текущем каталоге - Затем в каталогах, определенных в строке ввода Options|Directories|Resource directories Когда используется в модуле, ресурсный файл просто переписывается в полученный файл модуля. Никакая проверка, гарантирующая что файл существует на данном этапе, не производится. При компоновке приложения или библиотеки, обрабатываются файлы ресурсов, определенные во всех модулях и в самой программе или библиотеке, и каждый ресурс каждого ресурсного файла копируется в созданный EXE или DLL файлы. Директива $S: Установка размера сегмента ----------------------------------------- Определяет размер сегмента кода для сгруппированных модулей. Синтаксис: {$S РазмерСегмента} Значение по умолчанию: {$S 16384} Тип: Глобальная Режим: Windows, Protected Замечания: Директива $S допустима только в основной программе или библиотеке. Директива определяет размер сегментов кода для сгруппированных модулей. Выбранный размер должен находиться в диапазоне от 0 до 65535. Модули, размер которых превышает выбранный размер, помещаются в отдельные сегменты кода. При группировке модулей, компоновщик помещает модули с одними и теми же атрибутами сегмента кода в один и тот же сегмент кода, до достижения определенного размера. Это ограничение действует также и на группы, определенные с помощью директивы $G. Директива $S никогда не производит предупреждений или сообщений об ошибках. Если модуль не может быть записан в сегмент кода с другими модулями, он автоматически записывается в отдельный сегмент. Установка размера сегмента в 0 гарантирует, что каждый модуль будет записан в отдельный сегмент кода, что было установкой по умолчанию в предыдущих версиях компилятора. -------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: нет Всего: 32 |
Директивы и символы условной компиляции
---------------------------------------- Условная компиляция основана на оценке условных символов. Директива условного символа DEFINE ----------------------------------- Определяет условный символ с заданным именем Синтаксис: {$DEFINE Имя} Определенный символ существует до конца компиляции, или пока он не будет убран директивой $UNDEF Имя. Директива {$DEFINE Имя} не даст эффекта, если символ с именем "Имя" уже был определен. Условная директива компиляции ELSE ----------------------------------- Компилирует или пропускает исходный текст, следующий за директивой $ELSE. Синтаксис: {$ELSE} Внутри исходного текста, разделенного директивами $IFDEF (или $IFNDEF) и $ENDIF, $ELSE компилирует текст, следующий за $ELSE, если условие $IFDEF (или $IFNDEF) не выполняется. Если условие $IFDEF (или $IFNDEF) выполнено, то $ELSE игнорирует исходный текст, следующий за словом $ELSE. Условная директива компиляции ENDIF ------------------------------------ Завершает блок условной компиляции, начинающийся с последней условной директивы $IFxxx. Синтаксис: {$ENDIF} Условная директива компиляции IFDEF ------------------------------------ Компилирует текст, следующий за директивой IFDEF, если символ с именем "Имя" определен. Синтаксис: {$IFDEF Имя} Условная директива компиляции IFNDEF ------------------------------------- Компилирует текст, следующий за директивой IFNDEF, если символ с именем "Имя" НЕ определен. Синтаксис: {$IFNDEF Имя} Условная директива компиляции IFOPT ------------------------------------ Компилирует текст, следующий за директивой IFOPT, если заданный переключатель находится в определенном состоянии. Синтаксис: {$IFOPT Переключатель} Параметр "Переключатель" включает имя переключателя, сопровождаемое знаком "+" или "-": "Переключатель+" означает, что переключатель включен "Переключатель-" означает, что переключатель выключен Директива условного символа UNDEF ---------------------------------- Убирает предварительно определенный условный символ с именем "Имя" Синтаксис: {$UNDEF Имя} Символ забывается до конца компиляции или пока он вновь не будет объявлен с помощью директивы $DEFINE. Директива {$UNDEF Имя} не даст эффекта, если символ с именем "Имя" уже убран. Символы условной компиляции Символ Значение CPU86 Процессор принадлежит семье 80x86 CPU87 Присутствует ли сопроцессор 80x87 во время компиляции DPMI Указывает, что компиляция идет в защищенном режиме DOS MSDOS Указывает, что компиляция идет в реальном режиме DOS VER70 Номер версии Turbo Pascal WINDOWS Указывает, что компиляция идет в среде Windows Конструкции условной компиляции -------------------------------- Вы можете использовать директивы условной компиляции, чтобы генерировать различный код из одного и того же исходного текста, в зависимости от состояния условных символов. Вы можете использовать две конструкции: - {$IFxxx} ... {$ENDIF} - {$IFxxx} ... {$ELSE} ... {$ENDIF} IF ... ENDIF: Конструкция $IFxxx ... $ENDIF заставляет компилироваться исходный текст между $IFxxx и $ENDIF только в том случае, если условие, определенное в директиве $IFxxx истинно. Если условие ложно, то исходный текст между двумя директивами игнорируется. IF ... ELSE ... ENDIF: Конструкция $IFxxx ... $ELSE ... $ENDIF заставляет компилироваться - Исходный текст между $IFxxx и $ELSE, если условие $IFxxx истинно, - Исходный текст между $ELSE и $ENDIF, если условие $IFxxx ложно. Условные конструкции могут иметь 16 уровней вложений. В каждом исходном файле должно быть равное количество директив $IFxxx и $ENDIF. -------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
![]()
|
| Правила форума "Delphi" | |
|
|
Запрещается! 1. Обсуждать и делится взломанными компонентами или программным обеспечением 2. Публиковать ссылки на варез 3. Оффтопить
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |