Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
63
Добавлен:
21.01.2014
Размер:
55.81 Кб
Скачать

Лекция 13 (2 часа)

  1. Операторы работы с процедурами и функциями.

Операторы вызова процедур и процедур-функций

Оператор объявления BASIC-процедур - DECLARE (BASIC)

Оператор объявления процедур на языках семейства Microsoft - DECLARE Оператор задания процедуры - SUB

Оператор задания процедуры-функции - FUNCTION

Оператор вызова BASIC-процедур - CALL

Оператор вызова программ на машинном языке -CALL ABSOLUTE

13.1. Операторы вызова процедур и процедур-функций

Группа операторов вызова процедур и процедур-функций объединяет операторы следующего назначения:

• объявления BASIC-процедур;

_™0• объявления процедур на языках С, Pascal, FORTRAN, Assembler;

• задания процедур и процедур-функций;

• вызова BASIC-процедур;

• вызова разноязыковых модулей на языках семейства Microsoft (С, PaScai, FORTRAN, Assembler);

• вызова программ на машинном языке;

• выполнения команд MS DOS.

13.2. Оператор объявления BASIC-процедур - DECLARE (BASIC)

Назначение: Объявляет ссылки к BASIC-процедурам и вызывает проверку типов аргументов.

Синтаксис:

DECLARE (FUNCTION | SUB] <имя> [([ <список параметров> ])]

Аргумент Описание

<имя> Имя процедуры; оно ограничено 40 символами. Имя процедуры-функции FUNCTION может сопровождаться маркером типа (%, &, !, #, $) для возвращаемой величины

<список параметров> Список параметров используется при вызове процедуры, определяет только количество и тип аргументов

13.3. Оператор объявления процедур на языках семейства

Microsoft - DECLARE

Назначение: Объявляет вызываемые последовательности внешних процедур, написанных на других языках программирования семейства Microsoft.

Синтаксис 1:

DECLARE FUNCTION <имя> [CDECL] [ALIAS < альтернативное имя>"]

[([ <список параметров> ])]

Синтаксис 2

DECLARE SUB <имя> [CDECL] [ALIAS "<альтернативное имя>"]

[([ <список параметров> ])]

Элемент Описание

FUNCTION Указывает, что внешняя процедура возвращает значение; может использоваться в составе арифметических выражений

SUB Указывает, что внешняя процедура вызывается аналогично BASIC-процедуре

<имя> Имя, используемое в BASIC-программе для вызова процедуры; длина до 40 символов; имя процедуры-функции может включать маркер типа (%, &, !, #, $) для .возвращаемой величины.

CDECL Указывает, что процедура использует порядок размещения аргументов, свойственный языку С; ключевое слово CDECL указывает на передачу аргументов справа налево, а не слева направо, как принято в среде языка BASIC

ALIAS Указывает, что процедура имеет другое имя в .OBJ-файле или библиотеке; если отсутствует ключ ALIAS, то имя процедуры отображается строчными буквами, маркер типа удаляется, а в начале имени добавляется символ подчеркивания, и именно это имя используется при поиске библиотек и внешних файлов; если за ключом CDECL следует ключ ALIAS, то используется указанное альтернативное имя.

Синтаксис аргумента <список параметров>

[[BYVAL SEG]] <переменная> [AS <тип>] (, [[BYVAL SEGl] <переменная> [AS <тип>] ] ...

Элемент Описание

BYVAL Указывает, что параметр передается значением, а не ссылкой; передача ссылкой принята по умолчанию; ключ можно применять только для числовых параметров типа INTEGER, LONG, SINGLE, DOUBLE; при использовании BYVAL текущий аргумент преобразуется к типу, указанному в операторе DECLARE, непосредственно перед передачей параметра

SEG Указывает, что параметр передается адресом сегмента

<переменная> Имя, допустимое для переменных языка BASIC;

существенным является тип переменной; если переменная - массив, то в скобках можно указать его размерность (в частности, чтобы обеспечить совместимость с прежними версиями языка)

AS <тип> Указывает тип переменной: INTEGER, LONG, SINGLE, DOUBLE, STRING, ANY - или имя структуры; можно указывать также и маркер типа (%, &, !, #, $) или принимать его по умолчанию;

при объявлении внешних процедур, написанных на других языках, можно указать тип ANY, и это приведет к тому, что проверка типа не выполняется; нельзя использовать тип ANY для аргумента, передаваемого значением

Если не используются ключи BYVAL и SEG, то аргументы передаются смещением.

13.4. Оператор задания процедуры - SUB

Назначение: Указывает начало и конец процедуры.

Синтаксис:

SUB <глобальное имя> [( <список параметров> )] [STATIC]

[EXIT SUB] END SUB

Аргумент Описание

<глобальное имя> Имя переменной не более чем из 40 символов. Это имя не может использоваться в других операторах SUB или FUNCTION в данной программе, а также в библиотеке пользователя

<список параметров> Содержит имена простых переменных и массивов, передаваемых при вызове процедуры SUB. Каждое имя отделяется от предыдущего запятой. В связи с тем, что переменные и массивы передаются в процедуру ссылкой, то любое изменение величины аргумента в подпрограмме приводит к изменению величины этой переменной в вызываемой программе

Аргумент <список параметров> оператора SUB имеет следующий синтаксис:

<переменная> [()] [ AS <тип> ]

[, <переменная> [()] [ AS <тип> ]...,

где: <переменная> - имя переменной языка BASIC;

<тип> - тип переменной, принимающий значения INTEGER,

LONG, SINGLE, DOUBLE, STRING, ANY или определяемый пользователем.

В качестве параметра <тип> нельзя использовать строки фиксированной длины. Атрибут STATIC указывает, что все переменные, локальные для процедуры SUB, являются статическими и их величины сохраняются между вызовами.

13.5. Оператор задания процедуры-функции - FUNCTION

Назначение: Объявляет имя, параметры и способ формирования тела процедуры-функции.

Синтаксис:

FUNCTION < имя > [( список параметров )] [STATIC]

<имя> = <выражение> END FUNCTION

Аргумент Описание

<имя> Имя процедуры-функции эквивалентно имени переменной; содержит не более чем 40 символов и может включать символы определения типа (%. $i 'ч ^ члч $)• Тип возвращаемого значения может быть определен также и в операторе DEF

<список параметров> Список переменных, передаваемых в процедуру-функцию и разделенных запятыми. Поскольку параметры передаются ссылкой, то любое изменение величины параметра в процедуре-функции вызовет изменение величины этой переменной в вызывающей программе

STATIC Атрибут, указывающий, что все локальные для данной функции переменные сохраняются между вызовами. При отсутствии атрибута STATIC память под локальные переменные выделяется во время вызова процедуры-функции, а после возврата управления в вызывающую программу память освобождается. Атрибут STATIC не распространяет своего действия на используемые в процедуре-функции переменные, которые были объявлены вне этой процедуры в операторах DIM или COMMON с атрибутом SHARED

<выражение> Величина, возвращаемая процедурой-функцией. Она присваивается имени функции; если величина не присвоена, то возвращаемое значение равно: для числовых функций - 0, для строковых -" " (пустой строке).

Аргумент < список параметров > имеет следующий синтаксис:

<переменная> [()] [AS тип ]

[, <переменная> [()] [ AS тип ]...,

где: <переменная> - имя переменной языка BASIC;

<тип> - тип переменной, принимающий значения INTEGER,

LONG, SINGLE, DOUBLE, STRING, ANY или определяемый пользователем.

Оператор EXIT FUNCTION обеспечивает альтернативный выход из тела процедуры-функции.

13.6. Оператор вызова BASIC-процедур - CALL

Назначение: Передает управление подпрограмме SUB на языке BASIC. Синтаксис 1: CALL <имя> [( <список аргументов> )]

Синтаксис 2: <имя> [( <список аргументов> )]

Аргумент Описание

<имя> Имя ограничено длиной в 40 символов. Имя должно быть объявлено в операторе SUB, если процедура размешается в этом же модуле

<список аргументов> Переменные или константы, передаваемые в процедуру. Аргументы в списке отделяются за--пятыми. Аргументы, передаваемые ссылкой, могут быть изменены при выполнении процедуры

Если <список аргументов> включает переменную массива, то массив указывается именем, за которым следуют пустые скобки.

13.7. Оператор вызова программ на машинном языке -CALL ABSOLUTE

Назначение: Передает управление модулю, написанному на машинном языке. Синтаксис: CALL ABSOLUTE ([<список аргументов>,]<целая переменная>]) Аргумент Описание

<список аргументов> Необязательные аргументы, передаваемые процедуре на машинном языке

<целая переменная> Определяет смещение от начала текущего сегмента, установленного оператором DEF SEG. Аргумент <целая переменная> не передается процедуре. Оператор DEF SEG должен быть выполнен перед оператором CALL ABSOLUTE, чтобы указать начальный адрес сегмента для вызываемого модуля на машинном языке. Использование в качестве аргумента <целая переменная> нецелочисленного значения может вызвать непредвиденные последствия

Параметры из <списка аргументов> передаются процедуре на машинном языке ссылкой по смещению относительно начала текущего сегмента данных; в то же время обращение к самому модулю осуществляется по полному адресу.

Соседние файлы в папке Конспект лекций по информатике для студентов 1 курса каф. ТМС (Илюхин А.Ю.)