要求执行程序,但PROCEDURE / ENTRY有USING子句

时间:2015-03-14 19:27:43

标签: cobol gnucobol

是否有人知道导致此编译错误的原因是什么?我正在尝试使用OpenCOBOL编译旧的COBOL程序。这是我得到的错误:

Error: Executable program requested but PROCEDURE/ENTRY has USING clause

这是我的程序部门的样子:

procedure division using array-area, m, err, sum1.

这是我工作站的连接部分:

working-storage section.
77  i    picture s99 usage is computational.
77  prev picture s9(8) usage is computational.
77  d    picture s9(4) usage is computational.
01 error-mess.
    02 filler picture x(22) value ' illegal roman numeral'.
linkage section.
77  m    picture s99 usage is computational.
77  err  picture s9 usage is computational-3.
77  sum1 picture s9(8) usage is computational.
01  array-area.
    02 s picture x(1) occurs 30 times.

1 个答案:

答案 0 :(得分:2)

working-storage section.
77  i    picture s99 usage is computational.
77  prev picture s9(8) usage is computational.
77  d    picture s9(4) usage is computational.
01 error-mess.
    02 filler picture x(22) value ' illegal roman numeral'.
linkage section.
77  m    picture s99 usage is computational.
77  err  picture s9 usage is computational-3.
77  sum1 picture s9(8) usage is computational.
01  array-area.
    02 s picture x(1) occurs 30 times.

首先,不需要usageis这两个词。我使用USAGE for INDEX和POINTER。 computational不需要拼写完整,COMP就足够了,其中包括COMP-3

77级已经过了他们的销售日期,而且很少在LINKAGE SECTION看到它们。如果将它们全部更改为01级,则不会影响程序的运行。

数据名称很糟糕,几乎没有意义。我们有30个角色可以玩,所以让它们有意义。我,D和M是什么?您只能通过详细查看代码来判断。

这似乎是整个WORKING-STORAGE SECTIONLINKAGE SECTION不是其中的一部分,它们都是DATA DIVISION的一部分)。这表明该程序在程序部门中没有太多内容,但也表明该程序涉及大量文字。这很糟糕。使程序更难维护。

该程序似乎与罗马数字有关。为了突出数据名称可能造成的混淆,数字D,I和M分别与数据名D,I和M无关,但如果你更不走运,那么一个或多个数据名称将与具有单字符名称的数据名称相关联,但不同的名称。

如果没有更多代码,就无法说出更多内容。如果您想要对它进行审核,Stack Exchange就会为此目的提供代码审查。工作代码,如何做得更好......


从您现在显示的代码中,您需要将其编译为可加载模块,因此请使用-m开关而不是-x:

cobx -m ..otherswitches.. yourprogramname

由z / OS调用的程序在使用PROCEDURE DIVISION时只有一个项目,它将是一个由两字节二进制组成的组项(可能是COMP,也许是COMP- 4,COMP-5或BINARY,无关紧要)和PIC X最多100个字节,可能用OCCURS定义但很可能没有。可能它会在名称中包含单词PARM。

您显示的代码看起来不像传统的z / OS COBOL程序: - )


首先,您可能需要考虑升级到OpenCOBOL的新名称GnuCOBOL。这里有一个讨论区https://sourceforge.net/p/open-cobol/discussion/?source=navbar,适用于任何问题,无论大小。

GnuCOBOL知道如果您对PROCEDURE DIVISION或ENTRY语句进行了使用,如果使用-x开关将程序编译为可执行文件,则无法使用该程序。它必须编译为可加载模块,使用-m。

但是,正如cschneid指出的那样,在IBM Mainframe COBOL中,在第一个执行的程序中使用USING是常见且有效的,因为这是从运行程序的JCL获取参数值的方法。 / p>

如果是这种情况,则需要更改代码,以允许命令行中的参数。

那么,你有哪些?一个应该用-m编译的CALLed程序,还是一个需要操作系统参数的程序?

无论您是否升级,您都应该获得一份Gary Cutler的OpenCOBOL / GnuCOBOL编程指南。使用gary cutler cobol programming guide进行搜索可以找到正确的搜索结果。