Директивы подпрограмм

Определяют действия компилятора. Предусмотрены директивы:

Директива Действие Комментарий
Forward Опережающее описание Сообщает, что описание ПП находится дальше
External Внешняя подпрограмма ПП в дисковом файле в объектном коде
Assembler Язык Ассемблера Отмена стандартных инструкций обращения к ПП
Overload Перезагрузка Нужен анализ фактических параметров ПП
Far Дальняя модель вызова Для DOS. Для Windows не требуются
Near Ближняя модель вызова

Директивы, которые определяют порядок работы со стеком и регистрами процессора. Можно использовать одну из них.

Директива Действие Комментарий
Register Регистр Использовать до 3 регистров процессора для ПП. Установлена по умолчанию
Pascal Паскаль Все параметры подпрограмм размещаются в стеке. Для совместимости со старыми программами
StdCall Стандартный вызов Используется при обращении к ПП Windows API
SaveCall Безопасный вызов Используется при обращении к ПП Windows API при работе с дуальным интерфейсом
CDecl Декларации языка C Стек очищается вызывающей программой.
Для вызова ПП из DLL, написанных на языке C++

Директива External

Директива External – означает внешняя. Используется для включения в программу готовых ПП в машинных кодах. Они пишутся на языке Ассемблера или С, компилируются отдельно. Хранятся в виде файлов с расширением .obj. Для использования внешней ПП такого типа, в текст программы надо включить директиву компилятора {$L <имя Obj-файла>}. Формат заголовка:

function Max(x,y:real):real;external;

Пример

program Dir_External;

{$mode objfpc}{$H+}

{————-}

function Max(x,y:real):real;external;         // Объявление внешней ПП

begin

{————-}

{$L <имя Obj-файла>}                  // Директива компилятора

z:=Max(x,y);                                // Использование внешней ПП

{————-}

end.

Директива Overload. Перезагрузка функций

Возможны случаи, когда программист создает функции одинакового функционального назначения, но работающие по-разному. В таких функциях количество и тип параметров могут отличаться. При вызове подобной функции компилятор анализирует фактические параметры, на основании чего вызывает нужную функцию. Для обеспечения такой возможности используется директива компилятора Overload (перезагрузка). Директива overload включается в заголовок функции, для которой задается такой режим.

Пример. В нем с помощью двух перезагружаемых функций  с одинаковым именем Min для пары элементов определяется минимальное значение числа и порядкового номера символа.

program Dir_Overload;

{$mode objfpc}{$H+}

uses SysUtils,RusTrans;                          // Ссылка на модули

var

x,y: real;

s,v : char;

function Min(a,b:real):real; overload;             // Объявление 1 ПП

begin

if a>b   then result:=b

else result:=a;

end;

function Min(a,b:char):char; overload;              // Объявление 2 ПП

begin

if a>b   then result:=b

else result:=a;

end;

begin

writeln(Rus(‘Введите два номера’));        // Приглашение

readln(x,y);                                       // Ввод данных

writeln(‘Min=’, Min(x,y):3:0);                   // Вывод ответа с 1 ПП

readln;                                         // Пауза, смотрю результат

writeln(Rus(‘Введите два символа без пробела’));        // Приглашение

readln(s,v);                                                // Ввод данных

writeln(‘Min=’, Min(s,v));                   // Вывод ответа с 2 ПП

readln;                                         // Пауза, смотрю результат

end.end.

Процедура Exit

Процедура Exit используется для досрочного выхода из подпрограммы. Exit – выход


TwitterSEO CommunityВаау!News2.ruChippKoricaSMI2Google BookmarksDiggI.uaЗакладки YandexLinkstoreMyscoopCommunizmRu-marksWebmarksRuspaceLinkomaticKli.kzWeb-zakladkaZakladok.netRedditdeliciousMa.gnoliaTechnoratiSlashdotYahoo My WebБобрДобр.ruMemori.rurucity.comМоёМесто.ruMister Wong

Copyright © 2009-2010 Программирование на паскале.