|
│ 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}
исходный код
B.Pascal 7 & Objects /UG - 82 -
{$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 }
B.Pascal 7 & Objects /UG - 83 -
Директивы IFDEF и IFNDEF
Директивы IFDEF и IFNDEF позволяют вам условно компилировать
код на основе определения или неопределения некоторых идентифика-
торов.
Директивы IFDEF и IFNDEF обычно используются для включения в
компилируемый код отладочной информации. Например, если вы помес-
тите в начало каждого модуля следующий код:
{$IFDEF debug}
{$D+,L+}
{$ELSE}
{$D-,L-}
{$ENDIF}
а в начало программы следующую директиву:
{$DEFINE debug}
и компилируете свою программу, для использования с Турбо отлад-
чиком генерируется полная отладочная информация. Аналогично, вы
можете иметь фрагменты кода, компилируемые только при отладке. В
этом случае можно записать:
{$IFDEF debug}
исходный код
{$ENDIF}
где "исходный код" компилируется только в том случае, если в дан-
ной точке определен идентификатор debug.
B.Pascal 7 & Objects /UG - 84 -
Директива IFOPT
Иногда включить или исключить код желательно в зависимости
от того, какой выбран параметр компилятора (проверка диапазона,
проверка ввода-вывода и т.д.). Вы можете сделать это с помощью
директивы IFOPT, которая имеет две формы:
{$IFOPT x+}
и
{$IFOPT x-}
где x - один из параметров компилятора. При использовании первой
формы содержащийся ниже код будет компилироваться, если параметр
компилятора в данный момент разрешен; при использовании второй
формы код компилируется при запрещении параметра. Например, чтобы
выбрать тип данных для списка переменных на основе того, разреше-
на или нет поддержка сопроцессора 80х87, можно использовать сле-
дующий исходный код:
var
{$IFOPT N+}
Radius,Circ,Area: Double;
{$ELSE}
Radius,Circ,Area: Real;
{$ENDIF}
Примечание: Полное описание всех параметров компилято-
ра вы можете найти в Главе 2 ("Директивы компилятора")
"Справочного руководства программиста".
B.Pascal 7 & Objects /UG - 85 -
Просмотр исходного кода
─────────────────────────────────────────────────────────────────
IDE защищенного режима DOS содержит новое программное инс-
трументальное средство просмотра объектов - ObjectBrowser. Оно
позволяет вам исследовать программы и модули в программах и мно-
гое другое. Даже если разрабатываемое вами приложение не исполь-
зует объектно-ориентированное программирование, вы найдете
ObjectBrowser чрезвычайно полезным средством. Вы можете просмат-
ривать иерархию объектов, модулей и всех процедур, функций, пере-
менных, типов, констант и другие используемые в программе иденти-
фикаторы. С помощью ObjectBrowser вы можете делать следующее:
* Просмотреть в своей прикладной программе иерархию объек-
тов. Затем выбрать объект и просмотреть все его процедуры,
функции и другие содержащиеся в программе идентификаторы.
При проверке идентификатора вы можете вывести перечень
всех ссылок на него в процедурах, функциях программы и,
если хотите, перейти на то место в исходном коде, где он
используется.
* Вывести список всех глобальных идентификаторов, используе-
мые в вашей программе, и увидеть их описания. Если вы вы-
берите одну переменную, то можете вывести список всех ссы-
лок не нее в своей программе и, если хотите, перейти на то
место в исходном коде, где она используется.
* Вывести список всех используемых в программе модулей, за-
тем выбрать один из них и просмотреть список всех иденти-
фикаторов его интерфейсной части.
* Выбрать идентификатор в исходном коде, затем просмотреть
детальную информацию по нему, нажав клавишу Ctrl и однов-
ременно щелкнув правой кнопкой "мыши".
* Открыть множество окон просмотра, сравнить идентификаторы,
выводимые в различных окнах, а затем вернуться в предыду-
щее открытое в средстве просмотра окно.
Перед использованием ObjectBrowser убедитесь, что в диалого-
вом окне Options│Compiler установлены следующие параметры:
* Debug Information (Информация для отладки).
* Locals Symbols (Локальные идентификаторы).
* Symbol Information (Информация об идентификаторах).
Убедитесь также, что в диалоговом окне Debugging/Browsing
(Options│Debugger) установлен параметр Integrated Debugging/
Browsing (Отладка с использование встроенного отладчика/Прос-
мотр).
B.Pascal 7 & Objects /UG - 86 -
Скомпилируйте программу, которую вы хотите просматривать.
Для активизации ObjectBrowser выберите в меню Search (Поиск)
команду Objects (Объекты), Units (Модули) или Globals (Глобальные
идентификаторы). Вы можете также поместить курсор на идентифика-
тор в исходном коде и выбрать для вывода ObjectBrowser команду
Search│Symbol (Поиск│Идентификатор).
Вы можете также сделать так, чтобы компилятор "запоминал"
информацию об идентификаторах между компиляциями. Если этот пара-
метр включен, и вы измените программу, но следующая компиляция
завершиться неудачно, то вам все равно будет доступна информация
об идентификаторах, сохраненная с последней компиляции. Благодаря
этому вы сможете просмотреть свою программу, что поможет вам оп-
ределить источник проблемы. Чтобы компилятор сохранял информацию
об идентификаторах между компиляциями, нужно сделать следующее:
1. Выбрать команду Options│Enviroment│Startup.
2. Установить параметр Preserve Symbols (Сохранение иденти-
фикаторов); по умолчанию он установлен.
3. Выбрать командную кнопку OK.
4. Для выхода из IDE выбрать команду File│Exit.
5. Снова запустить IDE.
Примечание: Поскольку Preserve Symbols - это параметр
запуска, изменение его установки не будет иметь действие,
пока вы не выйдите из IDE и не запустите ее снова.
B.Pascal 7 & Objects /UG - 87 -
Если у вас есть "мышь", то исходный код удобнее просматри-
вать, если задать активизацию ObjectBrowser правой кнопкой "мы-
ши". Затем, удерживая нажатой клавишу Ctrl, вы можете использо-
вать правую кнопку "мыши" для указания и проверки объекта, проце-
дуры, функции, переменной или другого идентификатора в вашем ис-
ходном коде и его анализа (вывода детальной информации).
Примечание: Для быстрого просмотра идентификатора, на
котором в исходном коде позиционирован курсор, вы можете
также выбрать в локальном меню окна редактирования команду
Browse Symbol at Cursor (Просмотр идентификатора в позиции
курсора).
Чтобы задать просмотр с помощью "мыши", выполните следующие
шаги:
1. Выберите команду Options│Enviroment│Mouse.
2. Выберите параметр Browse as the Ctrl + Right Mouse Button
(Просмотр по клавише Ctrl + правая кнопка "мыши").
3. Выберите командную кнопку OK.
B.Pascal 7 & Objects /UG - 88 -
Просмотр объектов
─────────────────────────────────────────────────────────────────
Команда Search│Objects открывает окно, в котором выводятся
все используемые в программе объекты, упорядоченные в иерархичес-
кой структуре. В верхней части окна ObjectBrowser показывает ба-
зовый тип и выводит ниже и справа от базового типа потомков. Про-
яснить соотношения "предок-потомок" помогают соединяющие линии.
Примечание: Подробную информацию о типах объектов вы
можете найти в Главе 9 ("Объектно-ориентированной програм-
мирование").
▒File▒Edit▒Search▒▒Run▒▒Compile▒Debug▒Tools▒Options▒Window▒Help▒▒
╔═[*]══════════════════════ Browse: Object ════════════════2═[*]╗
║ Global Scope ║
║─┤ I ├─────────────────────────────────────────────────────────║
║─Objects▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒^
║ ├────Location █
║ │ ├───Block ▒
║ │ │ ├───Ball ▒
║ │ │ └───Brick ▒
║ │ ├───Cursor ▒
║ │ │ └───SaveScreen ▒
║ │ ├───Obstacle ▒
║ │ │ ├───Boundary ▒
║ │ │ │ ├───LeftBound ▒
║ │ │ │ ├───LowerBound ▒
║ │ │ │ ├───RightBound ▒
║ │ │ │ └───UpperBound ▒
║ │ │ ├───Paddle ▒
║ │ │ └───Wall ▒
║ │ └───TextString ▒
║ │ └───Counter ▒
║ │ └───DownCounter ▒
║ │ └───LimitCounter v
╚<▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒>─┘
░F1░Help░<┘░Browse░░Ctrl░<┘░Go░to░source░Space░Track░src░F10░Menu
Рис. 4.4 Просмотр иерархии объектов прикладной программы.
Если иерархия объектов у вас слишком большая, вы можете за-
дать, чтобы потомки конкретного объекта на экран не выводились.
* С помощью клавиатуры сделайте следующее:
1. Выберите объект.
2. Нажмите клавишу - (минус).
* При наличии "мыши" просто щелкните "мышью" на горизонталь-
ной линии, соединяющей объект с иерархией.
B.Pascal 7 & Objects /UG - 89 -
Теперь после объекта выводится + (плюс), и он подсвечивает-
ся, показывая, что потомки данного объекта на экран не выводятся.
Вы можете вывести потомков объекта снова.
* С помощью клавиатуры:
1. Выделите объект с символом +.
2. Нажмите клавишу +.
* При наличии "мыши" щелкните ей на горизонтальной строке,
соединяющей объект с иерархией.
Потомки объекта появляются вновь.
Из иерархии объектов вы можете просматривать все описанные в
индивидуальном объекте идентификаторы. Выделите объект и нажмите
клавишу Enter, либо дважды щелкните на объекте кнопкой "мыши".
При просмотре описанных в объекте идентификаторов вы можете
задать различные виды вывода:
* Для вывода информации о наследовании для просматриваемого
объекта щелкните "мышью" на букве I в верхней части окна
ObjectBrowser или нажмите клавиши Ctrl+I.
* Для вывода на экран перечня строк программы или модуля,
где имеется ссылка на идентификатор объекта щелкните
"мышью" на букве R в верхней части окна ObjectBrowser или
нажмите клавиши Ctrl+R.
* Для вывода области действия объекта щелкните "мышью" на
букве S или нажмите клавиши Ctrl+S.
Чтобы найти идентификатор в списке выводимых идентификато-
ров, наберите первую букву имени идентификатора; ваш курсор быст-
ро перемещается на соответствующий идентификатор.
Чтобы ObjectBrowser мог находить, где расположены ваши ис-
ходные файлые, вам может потребоваться изменить маршрут каталога
модулей и включаемых файлов в диалоговом окне Options│
Directories.
Если после открытия окна просмотра вы модифицируете исходный
код, добавляя или удаляя строки программы, то программу лучше пе-
рекомпилировать. Хотя ObjectBrowser после модификации исходного
кода все равно сможет отслеживать информацию об идентификаторах,
номера строк исходного кода, выводимые в окне редактирования, не
будут обновляться, пока программа не будет перекомпилирована.
Изменения режима вывода информации ObjectBrowser
B.Pascal 7 & Objects /UG - 90 -
Вы можете управлять характером вывода в ObjectBrowser инфор-
мации.
Можно выбрать, какие идентификаторы должны выводить
ObjectBrowser:
1. Для вывода диалогового окна Browser Options выберите ко-
манду Options│Browser.
2. В группе Symbols отметьте только те идентификаторы, кото-
рые вы хотите выводить в ObjectBrowser. Вы можете также
выбрать вывод идентификаторов, наследуемых от предков
объекта.
3. Выберите командную кнопку OK.
В ObjectBrowser выводятся только те идентификаторы, кото-
рые вы выбрали.
Вы можете также выбрать, какие идентификаторы выводить толь-
ко в активном окне просмотра. Для вывода диалогового окна Local
Browser Options (Локальные параметры просмотра) выберите в ло-
кальном меню окна просмотра команду Options или при отображении
окна просмотра нажмите клавиши Ctrl+O.
B.Pascal 7 & Objects /UG - 91 -
Если вы в качестве типа отображаемых идентификаторов выбере-
те типы, переменные и процедуры, а затем будете просматривать
объект Location в программе BREAKOUT.PAS (пример демонстрационной
программы в каталоге EXAMPLES\DOS\BREAKOUT), то увидите следующую
информацию об идентификаторах:
▒File▒Edit▒Search▒▒Run▒▒Compile▒Debug▒Tools▒Options▒Window▒Help▒▒
╔═[*]══════════════════════ Browse: Object ════════════════2═[*]╗
║ Global Scope ║
║─┤ S │ I │ R ├─────────────────────────────────────────────────║
║▒var▒▒▒▒Location.X:▒▒Integer▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒^
║ var Location.Y: Integer █
║ var Location.Visible: Boolean ▒
║ var Location.Init(Integer, Integer) ▒
║ proc Location.Relocate(Integer, Integer) ▒
║ proc Location.MoveTo(Integer, Integer) ▒
║ proc Location.Show ▒
║ proc Location.Hide ▒
║ func Location.GetX: Integer ▒
║ func Location.GetY: Integer ▒
║ func Location.InVisible: Boolean ▒
║ ▒
║ ▒
║ v
╚<█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒>─┘
░F1░Help░<┘░Browse░░Ctrl░<┘░Go░to░source░Space░Track░src░F10░Menu
Рис. 4.5 Просмотр информации об идентификаторах.
Сокращения слева от перечисленных идентификаторов перечисля-
ют идентификаторы, представляющие вид выводимого идентификатора.
Заметим, что включение идентификаторов процедур также включает
идентификаторы функций.
┌───────────────┬────────────────────────────────────┐
│ Идентификатор │ Смысл │
├───────────────┼────────────────────────────────────┤
│ const │ Константа │
│ func │ Функция │
│ label │ Метка │
│ proc │ Процедура │
│ type │ Тип │
│ var │ Переменная или типизированная кон- │
│ │ станта. │
└───────────────┴────────────────────────────────────┘
Для вывода предыдущего окна просмотра выберите команду
Search│Previous Browser или нажмите клавиши Ctrl+P.
Когда вы просматриваете выделенный идентификатор, окно
B.Pascal 7 & Objects /UG - 92 -
ObjectBrowser по умолчанию выводит информацию об области дейс-
твия. Если вы предпочитаете по умолчанию видеть информацию о
ссылках, то сделайте следующее:
1. Выберите команду Options│Browser.
2. Выберите в качестве значения параметра Preferred Pane
Reference.
3. Выберите командную кнопку OK.
По умолчанию ObjectBrowser выводит для проверяемого иденти-
фикатора полную информацию об описании. Вы можете просмотреть все
поля и методы записей и объектов, включая полностью уточненные
Дата добавления: 2015-09-30; просмотров: 21 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |