ГнуКобол эквивалент NOSSRANGE - PullRequest
0 голосов
/ 03 июля 2019

Я хочу указать одну байтовую область в разделе связей. Программа A может вызывать программу B как

call 'PROGB'   using mycopybook

где mycopybook может быть 500 байт один раз, 2000 байт в следующий раз и т. Д. И т. Д.

«Простой» способ избежать необходимости знать / резервировать максимальное количество байтов, ожидаемое в разделе связывания в программе B, состоит в том, чтобы определить его как ОДИН байт (в конце концов, раздел связывания программы B является только указателем на mycopybook в памяти ни много ни мало). Проблема в том, что когда я пытаюсь скомпилировать программу B, используя следующее

LINKAGE SECTION.
01  copybook-1     pic x.
procedure division using copybook-1.
display 'First 4 bytes passed in 'copybook-1(1:4)

Я получаю ошибку компиляции.

progent.cbl: 113: ошибка: длина 'copybook-1' вне границ: 4

Существует ли какой-либо параметр COBC, эквивалентный NOSSRANGE?

(FWIW, в Мэйнфрейме Express в Micro Focus по умолчанию, где я работал, был SSRANGE, поэтому мне пришлось установить NOSSRANGE специально для примера выше, но после этого проблем не было)

1 Ответ

0 голосов
/ 03 июля 2019

Существует ли какой-либо параметр COBC, эквивалентный NOSSRANGE?

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

GnuCOBOL имеет возможность включить все проверки во время выполнения: --debug, использование этого будет похоже на SSRANGE(2) [проверка при компиляции и во время выполнения], но не использовать его не похоже NOSSRANGE, поскольку проверки во время компиляции выполняются безоговорочно; вы можете только отключить свертывание констант во время компиляции, например field (1-1:5) на -fno-constant-folding, что не вызовет проблемы, но field (0:5) всегда будет так делать.

Если вы можете отключить его вообще, вы, конечно, можете настроить компилятор (cobc / typeck.c) и удалить эти проверки, но переключение будет намного лучше!

...