Программа B не возвращает ни всей LINKAGE SECTION, ни commarea (COMMA в вашем примере).
Он ничего не возвращает.
Почему он ничего не возвращает? Потому что ему ничего не передается.
Или, скорее, то, что передается ему, - это просто адрес (ы) параметра (ов). Ничего больше. Вот и все. Важно отметить, что нет длины.
PROGA
01 some-stuff.
05 a-bit-of-stuff PIC X.
05 the-rest-of-the-stuff PIC X(99).
CALL .... USING a-bit-of-stuff
PROGB
LINKAGE SECTION.
01 stuff-that-is-somewhere-else PIC X(100).
PROCEDURE DIVISION USING stuff-that-is-somewhere-else.
а-бит из-материал определяют как только один байт. Это не имеет значения. Это определение в разделе LINKAGE РАЗДЕЛ пункта по ПРОГРАММНОМУ ОТДЕЛЕНИЮ ИСПОЛЬЗОВАНИЯ ... которое соответствует, в порядке ссылки, ничто иное, к CALL ... ИСПОЛЬЗОВАНИЕ ...
PROGB будет " прошел «адрес бит-материала». Если этот адрес затем сопоставляется с 100 байтами в LINKAGE SECTION программы CALLed, COBOL вообще не возражает.
Если мы заменим этот пример CALL на использование некоторого материала, поскольку у некоторого материала есть тот же самый начальный адрес, что и бит-бит, в сгенерированном коде абсолютно не будет изменений, и никаких изменений в выполнение двух программ.
Определение различных размеров данных «между« CALLer »и« CALLed »обычно не выполняется, потому что это делает вещи менее понятными для нас, людей. Компилятор не заботится ни о чем.
Что вам нужно, чтобы посмотреть на 01s (или 77s, если эта глупая идея примет ваше воображение), так как это ОТКЛЮЧЕНИЕ. Они являются НЕОБХОДИМЫМИ, НЕПОСРЕДСТВЕННЫМИ, данные, которые определены где-то в другом месте. Данные не определены для элементов в разделе LINKAGE SECTION (есть один исключение из этого на Mainframe). Уровни 01 в LINKAGE SECTION просто переопределяют или сопоставляют адрес данных, передаваемых программе. Данные не «оставляют» программу CALLing, и данные никогда не «возвращаются».
Вещи могут ошибочны, конечно, если вы используете разные длины для соответствия товарам в ИСПОЛЬЗОВАНИИ. Если хранилище из CALLer «приобретено» (например, GETMAIN в CICS), то попытка связать данные за пределами этого хранилища, даже один байт дальше, может заставить вас отказаться из-за исключения адресации (S0C4, который CICS будет любезно назовите что-нибудь еще для вас, AKEA).
Даже без приобретенного хранилища другие поля после «пройденного» могут быть случайно повреждены или само поле не может получить ожидаемое количество данных, переданных ему программой CALLed, если это определение коротко в CALLed программа.
На самом деле есть две вещи, которые «возвращаются» из программы CALLed. Это особый регистр RETURN-CODE и единственный элемент в ВОЗВРАЩЕНИИ ПРОЦЕДУРНОГО ОТДЕЛЕНИЯ (если используется, скорее всего, нет).
Несмотря на это, механизмы того, как они достигнуты, отличаются от нормального непонимания данных, «прошедших» между программами CALL и CALLed.
Помимо двух кавычек, вам нужно немного поработать над этим. –