#ibm-midrange #rpgle
Вопрос:
У меня есть программа RPGLE, которая предназначена для приема 2 параметров. Хотя это не имеет смысла, я наткнулся на код, вызывающий эту программу (через callp), передающий 3 параметра.
Вызывающая программа также определила прототип с тремя параметрами (опять же, это неверно).
Поэтому мой вопрос в том, что произойдет, если в программу RPG будет передано больше параметров? К моему удивлению, при тестировании не было никаких ошибок. Но было ли это случайностью? Является ли это потенциальной ошибкой, ожидающей своего часа?
Ответ №1:
Программы RPG не проверяют количество фактически переданных параметров. Если один из них отсутствует, и программа использует его, то возникает исключение, вы можете предотвратить случай, используя %parms
и %parmnum
.
Когда их больше, чем ожидалось, это игнорируется. Так что не ждите здесь ошибок… пока вы не добавите вызываемому абоненту третий параметр, который не соответствует типу или длине, определенным вызывающим абонентом.
Чтобы предотвратить такого рода ситуации, принято обмениваться прототипами между вызывающим абонентом и вызываемым абонентом через /COPY
или /INCLUDE
источники
Ответ №2:
Параметры передаются в программу через стек. Внутри программы первый параметр будет находиться в верхней части стека, затем второй и так далее (это справедливо для C / C , RPG … и, например, в Pascal используется обратный порядок). Таким образом, если вы передадите программе больше параметров, чем она ожидает, ничего страшного не произойдет (если это не Pascal 🙂 — все ваши дополнительные параметры будут находиться в самом низу стека, программа просто не будет извлекать их оттуда. считает, что их там нет.