Прототипы ПРОЦЕДУР и ФУHКЦИЙ
имя[(список параметров)][,возвращаемый тип][,соглашение вызова][,RAW][,NAME()]
Имя | Метка оператора PROCEDURE или FUNCTION. |
Список параметров | типы данных переданных ПРОЦЕДУРЕ или ФУНКЦИИ в качестве параметров |
возвращаемый тип | Тип данных, который возвращает FUNCTION. |
Соглашения Вызова | Задает паскалевский или С-подобный вид передачи параметров через стек. |
RAW | Указывет, что параметры STRING или GROUP передают только адрес в памяти. |
NAME | Определяет замену, "внешнее" имя для ПРОЦЕДУРЫ или ФУНКЦИИ. |
Все ПРОЦЕДУРЫ и ФУНКЦИИ в ПРОГРАММЕ должны быть объявлены как прототипы в MAP. Прототип состоит из: имени ПРОЦЕДУРЫ или ФУНКЦИИ, необязательного списка параметров, и возвращаемого типа данных (если описывается FUNCTION). Если PROCEDURE или FUNCTION библиотека, написанная на другом языке, C или ПАСКАЛЕ, может быть указано соглашение о вызове (передаче параметров через стек. Также может быть определено внешнее (external) ИМЯ.
Необязательный список параметров - список типов данных которые передаются ПРОЦЕДУРЕ или ФУНКЦИИ, разделяются запятыми и заключается в круглые скобками. Любой параметр который может быть опущен при вызове PROCEDURE или FUNCTION, должен быть в список параметров прототипа и заключаться в угловые скобки ( <> ). Есть три типа параметров которые могут быть пропущены: параметры-значения, параметры-переменные, и параметры-указатели (?).
Параметры-значенияи "передаются по значению." В "вызванной" ПРОЦЕДУРЕ или ФУНКЦИИ используется копия переменной переданной в списке параметров "вызывающей" ПРОЦЕДУРЫ или ФУНКЦИИ. "Вызванная" PROCEDURE или FUNCTION не может изменить значение переменной переданной ей "вызывающей". Параметры-значения представлены в списке типом данных в прототипе ПРОЦЕДУРЫ или ФУНКЦИИ в MAP. Допустимые типы параметров-значений:
BYTE | SHORT | USHORT | LONG | ULONG | SREAL | REAL | DATE | TIME | STRING |
Параметры-переменные "передаются по адресу". Переменная переданная по адресу имеет только один адрес в памяти.
Изменение значения переменной в "вызванной" ПРОЦЕДУРЕ или ФУНКЦИИ изменяет значение самой переменной, а не ее копии. Параметры-переменные представлены в списке типами данных со звездочкой (*) в прототипе ПРОЦЕДУРЫ или ФУНКЦИИ в MAP. Допустимые типы параметров-переменных:
*BYTE | *SHORT | *USHORT | *LONG | *ULONG | *SREAL | *REAL |
*DATE | *TIME | *STRING | *PSTRING | *CSTRING | *GROUP |
Параметры-указатели передают имя структуры данных "вызванной" ПРОЦЕДУРЕ или ФУНКЦИИ. Передача указателя позволяет "вызванной" ПРОЦЕДУРЕ или ФУНКЦИИ использовать те команды Кларион, которые требуют метку структуры как параметр. Параметры-указатели представлены в списке типом указатель в прототипе ПРОЦЕДУРЫ или ФУНКЦИИ в MAP. Параметры-указатели всегда "передаются по адресу." Допустимые типы параметров-указателей:
FILE | KEY | INDEX | QUEUE | SCREEN | REPORT | PULLDOWN |
FUNCTION должна ВОЗВРАЩАТЬ (RETURN) значение. Тип данных который нужно возвратить внесен в список, отделяется запятой, после необязательного списка параметров. Допустимые типы результатов, возвращаемых функцией:
BYTE | SHORT | USHORT | LONG | ULONG | SREAL |
REAL | DATE | TIME | STRING |
Вы можете, но не обязаны, указать способ передачи параметров - C или ПАСКАЛЬ для вашей ПРОЦЕДУРЫ или ФУНКЦИИ. Это обеспечивает совместимость библиотеками написанными на других языках. Если вы не указываете тип соглашения о вызове, по умолчанию используется внутреннее, основанное на регистрах соглашение.
Признак RAW позволяет вам передавать только адрес памяти СТРОКИ или ГРУППЫ, либо как параметр-значение, либо как параметр-переменную. Обычно, параметры STRING или GROUP передают адресату(?) еще и длину строки. Признак RAW подавляет передачу длины. Это наиболее полезно для функций внешних библиотек, которые ожидают получить только адрес строки.
Признак NAME обеспечивает внешнее имя для ПРОЦЕДУРЫ или ФУНКЦИИ. Это также сделано для совместимости с библиотеками написанными на других языках. Например: В некоторых компиляторах языка C, при C-шном соглашении о вызове заданном для функции, компилятор добавляет подчеркивание к имени функции.
Признак NAME позволяет линкеру разрешить нормальное имя функции не заставляя программу на Кларион обращаться к функции с именем, начинающимся с подчеркивания.
Пример:
MAP
MODULE('Test')
!'test.cla' содержит эту процедуру и функции
MyProcl(LONG) !LONG параметр-значение
MyProc2() !Hеобязательный LONG параметр-пере-
!менна
MyFuncl(*SREAL),REAL,C
!SREAL параметр-переменная, возвращаем REAL,
!C-шное соглашение вызова
MyFunc2(FILE),STRING
!FILE параметр-указатель, возвращаем STRING
. !конец MODULE и MAP
MODULE('Party3.Obj') !third-party библиотека
Func46(*CSTRING),REAL,C,RAW
!Передаем только адрес CSTRING в C-функцию
Func48(REAL),REAL,PASCAL !PASCALевский вызов
Func49(SREAL),REAL,C,NAME('_func49')
!C-шный вызов и внешнее имя функции
. . !конец MODULE и MAP
См. Также: , , , ,