TURBO PASCAL |
Новости
|
Директивы DEFINE и UNDEFДирективы IFDEF и IFNDEF проверяют, определен ли заданный идентификатор. Эти идентификаторы определяются с помощью DEFINE и UNDEF. (Можно также определять идентификаторы в командной строке или в IDE.) Чтобы определить идентификатор, включите в программу следую- щую директиву: {$DEFINE идентификатор} где "идентификатор" в плане длины, разрешенных символов и других спецификаций подчиняется обычным правилам для имен идентификато- ров. Например, вы можете записать: {$DEFINE debug} Этим для остальной части компилируемого модуля или до следу- ющего оператора: {$UNDEF debug} определяется идентификатор debug. Директива UNDEF "разопределяет" идентификатор. Если иденти- фикатор не определен, то она не действует. Определение условных идентификаторов в IDE Вместо того, чтобы вставлять директиву DEFINE в свой исход- ный код, вы можете также определить условные идентификаторы и блоке ввода Conditional Defines (Условные определения). Определи- те идентификаторы, введя их в блоке ввода и разделив точками за- пятой. Например, в следующем примере определяются два условных идентификатора - TestCode и DebugCode: TestCode:DebugCode Предопределенные идентификаторы Кроме определяемых вами идентификаторов вы можете также про- верять отдельные идентификаторы, определяемые компилятором: Предопределенные условные идентификаторы Таблица 4.4 ┌───────────────────┬───────────────────────────────────────────┐ │ Идентификатор │ Показывает │ ├───────────────────┼───────────────────────────────────────────┤ │ CPU86 │ Данная версия Borland Pascal предназначена│ │ │ для семейства процессоров 80х86. │ ├───────────────────┼───────────────────────────────────────────┤ │ CPU87 │ Присутствует арифметический сопроцессор│ │ │ 80х87. │ ├───────────────────┼───────────────────────────────────────────┤ │ DPMI │ Данная версия предназначена для операцион-│ │ │ ной среды защищенного режима DOS. При соз-│ │ │ дании приложений для защищенного режима│ │ │ DOS данный идентификатор доступен для│ │ │ BP.EXE. │ ├───────────────────┼───────────────────────────────────────────┤ │ MSDOS │ Данная версия предназначена для операци-│ │ │ онной системы MS-DOS. Данный идентификатор│ │ │ доступен в BP.EXE только при создании при-│ │ │ ложений DOS реального или защищенного ре-│ │ │ жима и в TURBO.EXE. │ ├───────────────────┼───────────────────────────────────────────┤ │ VER70 │ Данная версия является версией 7.0 компи-│ │ │ лятора. │ ├───────────────────┼───────────────────────────────────────────┤ │ WINDOWS │ Данная версия предназначена для операци-│ │ │ онной среды Windows. Данный идентификатор│ │ │ доступен в BP.EXE и в BPW.EXE, когда целе-│ │ │ вой платформой является Windows. │ └───────────────────┴───────────────────────────────────────────┘ Подробнее о предопределенных условных идентификаторах компи- лятора рассказывается в Главе 2 ("Директивы компилятора") "Руко- водства программиста". Идентификаторы IFxxx, ELSE и ENDIF Смысл условных директив в том, что если определен или нет конкретный идентификатор либо если установлен или нет конкретный параметр, вы можете выбирать для компиляции некоторые части ис- ходного кода. Они имеют следующий общий формат, где IFxxx - это директивы IFDEF, INDEF или IFOPT, за которыми следует соответс- твующий аргумент, а "исходный код" - любое количество исходного кода Паскаля. {$IFxxx} исходный код {$ENDIF} Если выражение в директиве IFxxx принимает значение True, то "исходный код" компилируется; в противном случае он игнорируется и интерпретируется как обычный комментарий в программе. Часто у вас имеются альтернативные фрагменты кода. Если вы- ражение принимает значение True, то компилируется один фрагмент кода, а если False - другой. Компилятор позволяет сделать это с помощью директивы $ELSE: {$IFxxx} исходный код A {$ELSE} исходный код B {$ENDIF} Если выражение в IFxxx равно True, то компилируется "исход- ный код A", в противном случае компилируется "исходный код B". Все директивы IFxxx должны завершаться с одном исходном фай- ле. Это означает, что они не могут начинаться в одном исходном файле и заканчиваться в другом. Однако, в директиве IFxxx может указываться включаемый файл: {$IFxxx} {$I file1.pas} {$ELSE} {$I file2.pas} {$ENDIF} Таким образом, на основе некоторого условия вы можете выби- рать альтернативные включаемые файлы Допускается использовать вложенные конструкции IFxxx..ENDIF, так что вы можете записать, например, следующее: {$IFxxx} { первая директива IF } . . . {$IFxxx} { первая директива IF } . . . {$ENDIF} { завершает вторую директиву IF } . . . {$ENDIF} { завершает первую директиву IF } Директивы IFDEF и IFNDEF Директивы IFDEF и IFNDEF позволяют вам условно компилировать код на основе определения или неопределения некоторых идентифика- торов. Директивы IFDEF и IFNDEF обычно используются для включения в компилируемый код отладочной информации. Например, если вы помес- тите в начало каждого модуля следующий код: {$IFDEF debug} {$D+,L+} {$ELSE} {$D-,L-} {$ENDIF} а в начало программы следующую директиву: {$DEFINE debug} и компилируете свою программу, для использования с Турбо отлад- чиком генерируется полная отладочная информация. Аналогично, вы можете иметь фрагменты кода, компилируемые только при отладке. В этом случае можно записать: {$IFDEF debug} исходный код {$ENDIF} где "исходный код" компилируется только в том случае, если в дан- ной точке определен идентификатор debug. Директива IFOPT Иногда включить или исключить код желательно в зависимости от того, какой выбран параметр компилятора (проверка диапазона, проверка ввода-вывода и т.д.). Вы можете сделать это с помощью директивы IFOPT, которая имеет две формы: {$IFOPT x+} и {$IFOPT x-} где x - один из параметров компилятора. При использовании первой формы содержащийся ниже код будет компилироваться, если параметр компилятора в данный момент разрешен; при использовании второй формы код компилируется при запрещении параметра. Например, чтобы выбрать тип данных для списка переменных на основе того, разреше- на или нет поддержка сопроцессора 80х87, можно использовать сле- дующий исходный код: var {$IFOPT N+} Radius,Circ,Area: Double; {$ELSE} Radius,Circ,Area: Real; {$ENDIF} Примечание: Полное описание всех параметров компилято- ра вы можете найти в Главе 2 ("Директивы компилятора") "Справочного руководства программиста". |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |