提问人:cup 提问时间:2/19/2023 更新时间:2/20/2023 访问量:131
COBOL Linkage 中的多个函数 [重复]
Multiple functions in COBOL Linkage [duplicate]
问:
我是一名 C++/Python 开发人员,涉足 COBOL,在 Linux 上使用 open-cobol (cobc)。
我有几个相关的功能,我想把它们放在一起。通常,在 COBOL 中,每个链接部分只有一个函数。我目前做的是
CALL "GEAR-FUNCS" USING DO-SOMETHING PARAMS...
它根据 DO-SOMETHING 的值执行相关函数。这减少了文件的数量,但这意味着我每次都必须传递相同数量的参数,即使其中一些参数不相关。
最终目标是减少编译行上的文件数量。我不想最终得到一个大的主文件和很多小的链接文件,我每次都必须拉进来。我只想有几个链接文件。目前,我所知道的唯一方法是我的函数查找或创建一个包含所有链接函数的库。
我想知道是否有更好的方法。例如,是否有一些东西可以允许在单个来源中进行多个链接部分或程序划分?
答:
1赞
cup
2/20/2023
#1
这不是一个答案 - 答案在多个 Cobol 子例程是否可以在同一个模块 https://stackoverflow.com/a/48949229/2041317 中。这只是一系列示例供参考。定义了两个函数 - LN-FUNC 和 LN-OBJ-FUNC。
COBOL-85 多程序方法
IDENTIFICATION DIVISION. PROGRAM-ID. LN-FUNC. DATA DIVISION. LINKAGE SECTION. 77 VAR1 PIC 9(2). 77 VAR2 PIC 9(2). 77 RESULT PIC ZZ9. PROCEDURE DIVISION USING VAR1, VAR2, RESULT. COMPUTE RESULT = VAR1 + VAR2. * This is the return statement GOBACK. END PROGRAM LN-FUNC. ******************************************** IDENTIFICATION DIVISION. PROGRAM-ID. LN-OBJ-FUNC. DATA DIVISION. LINKAGE SECTION. 01 VAR-OBJ. 02 OBJ-VAR1 PIC 9(2). 02 OBJ-VAR2 PIC 9(2). 77 RESULT PIC ZZ9. PROCEDURE DIVISION USING VAR-OBJ, RESULT. * Another function entry point COMPUTE RESULT = OBJ-VAR1 + OBJ-VAR2. * Alternative to GOBACK. EXIT PROGRAM. END PROGRAM LN-OBJ-FUNC.
使用嵌套程序。这些需要像这样嵌套
(AAA(BBB(CCC)))
不
(AAA (BBB) (CCC))
例
IDENTIFICATION DIVISION.
PROGRAM-ID. NESTED.
PROCEDURE DIVISION.
DISPLAY "SURPRISE - THIS GOT EXECUTED?".
********************************************
* First nested linkage
********************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. LN-FUNC.
DATA DIVISION.
LINKAGE SECTION.
77 VAR1 PIC 9(2).
77 VAR2 PIC 9(2).
77 RESULT PIC ZZ9.
PROCEDURE DIVISION USING VAR1, VAR2, RESULT.
COMPUTE RESULT = VAR1 + VAR2.
* This is the return statement
GOBACK.
********************************************
* Second nested linkage
********************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. LN-OBJ-FUNC.
DATA DIVISION.
LINKAGE SECTION.
01 VAR-OBJ.
02 OBJ-VAR1 PIC 9(2).
02 OBJ-VAR2 PIC 9(2).
77 RESULT PIC ZZ9.
PROCEDURE DIVISION USING VAR-OBJ, RESULT.
* Another function entry point
COMPUTE RESULT = OBJ-VAR1 + OBJ-VAR2.
* Alternative to GOBACK.
EXIT PROGRAM.
END PROGRAM LN-OBJ-FUNC.
END PROGRAM LN-FUNC.
END PROGRAM NESTED.
使用条目
IDENTIFICATION DIVISION. PROGRAM-ID. USE-ENTRY. DATA DIVISION. LINKAGE SECTION. * For LN-FUNC 77 VAR1 PIC 9(2). 77 VAR2 PIC 9(2). 77 RESULT PIC ZZ9. * For LN-OBJ-FUNC 01 VAR-OBJ. 02 OBJ-VAR1 PIC 9(2). 02 OBJ-VAR2 PIC 9(2). PROCEDURE DIVISION. * This never gets displayed DISPLAY "Starting multi". * This is a function entry point ENTRY "LN-FUNC" USING VAR1, VAR2, RESULT. COMPUTE RESULT = VAR1 + VAR2. * This is the return statement GOBACK. * Another function entry point ENTRY "LN-OBJ-FUNC" USING VAR-OBJ, RESULT. COMPUTE RESULT = OBJ-VAR1 + OBJ-VAR2. * Alternative return statement EXIT PROGRAM. END PROGRAM USE-ENTRY.
下一个:如何读取链接产生的矩阵?
评论
OMITTED
CALL
OPTIONAL