Оперативная память

         

Прототип процедуры



Прототип процедуры

Если процедура и вызывающий модуль готовятся независимо друг от друга и объединяются только при компоновке задачи, то выполнить указанное выше условие невозможно. В таком случае в текст вызывающего модуля включается прототип процедуры. Для его описания существует специальная директива, имеющая следующий формат:

имя_процедуры PROTO тип [langtype] [, список_параметров ]

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

Рассмотрим конкретный случай. Предположим, что процедура, описанная в примере В. 7, подготовлена в виде объектного модуля. Для создания ее прототипа надо взять из примера В. 7 строку, содержащую директиву PROC, заменить слово PROC на PROTO и исключить описание сохраняемых в стеке регистров (USES edx fs si).
В результате получится следующий прототип:

cnvindec PROTO FAR PASCAL, addressrdword

Из этого примера видно, что для получения прототипа из описания директивы PROC исключаются только те спецификаторы, которые нужны при компиляции процедуры и не используются при компиляции вызывающего модуля.

При компиляции вызывающего модуля Макроассемблеру недоступно описание процедуры, поэтому имя процедуры, ее тип и значение Langtype он "принимает на веру", но имена параметров проверяет обязательно.

В списке PROTO указываются имена формальных параметров. Они не должны совпадать с именами переменных, описанных в вызывающем модуле. В противном случае Макроассемблер выдаст сообщение о повторном определении имени и прервет процесс компиляции. При успешной компиляции имена и размеры параметров включаются в объектный модуль и используются компоновщиком при сборке задачи. На стадии сборки известны описание процедуры и способ ее вызова и компоновщик проверяет их соответствие друг другу.



Содержание раздела