Объявление параметра в прототипе процедуры и интерфейсе в RPG

Я пытаюсь понять, как переменные параметров объявляются в прототипе процедуры (PR) и интерфейсе процедуры (PI) в программе RPG. Почему переменные параметров необходимо определять как в PR, так и в PI? Заявление об этом в обоих местах необходимо, но зачем менять определение?


person Community    schedule 04.07.2017    source источник
comment
Ага. Так поступила IBM. Я думаю, что у них в голове был COBOL, где процедура также определена в двух местах.   -  person danny117    schedule 06.07.2017
comment
ANSI C также ранее использовал объявления как прототипов, так и интерфейсов. Прототип предназначен для использования вызывающими абонентами, а интерфейс используется вызываемой процедурой. Вызывающий должен знать правильные формы данных, которые ожидаются, а вызываемый процесс должен знать, что будет исходить от вызывающего. Поскольку они часто находятся в разных программах, необходимы два отдельных определения, потому что формы должны совпадать с обеих сторон вызова. Обычный вопрос: зачем и то, и другое необходимо в одной автономной программе ILE RPG, и ответ таков: это верно только для устаревших выпусков.   -  person user2338816    schedule 17.08.2017


Ответы (1)


Вам не нужен Dcl-Pr для процедур в одном модуле. Вам нужен только прототип для процедур, которые либо

  1. в другом модуле программы
  2. в сервисной программе, на которую вы пытаетесь сослаться
person Barry    schedule 05.07.2017
comment
Это предполагает, что OP включен и компилируется для последней версии ОС. Более старые версии требовали PR даже для внутренних процедур модуля. - person Charles; 05.07.2017
comment
Я обычно сейчас определяю интерфейс процедуры для программ вместо использования *ENTRY PLIST. Хотя нет необходимости определять прототип для них, это делает вызовы немного приятнее, потому что я помещаю все свои прототипы в отдельную книгу для копий, и я могу просто скопировать соответствующие прототипы, когда мне нужно вызвать программу. - person jmarkmurphy; 10.07.2017
comment
Да, это очень полезно в сервисных программах. Вы просто помещаете прототип своей процедуры в вызывающую программу, а затем можете использовать процедуру служебных программ (когда процедура определена с помощью EXPORT). - person nicowi; 18.07.2019