TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

Директивы 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  ("Директивы  компилятора")
              "Справочного руководства программиста".

 

Содержание

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz