COBOL Linkage 中的多个函数 [重复]

Multiple functions in COBOL Linkage [duplicate]

提问人:cup 提问时间:2/19/2023 更新时间:2/20/2023 访问量:131

问:

我是一名 C++/Python 开发人员,涉足 COBOL,在 Linux 上使用 open-cobol (cobc)。

我有几个相关的功能,我想把它们放在一起。通常,在 COBOL 中,每个链接部分只有一个函数。我目前做的是

CALL "GEAR-FUNCS" USING DO-SOMETHING PARAMS...

它根据 DO-SOMETHING 的值执行相关函数。这减少了文件的数量,但这意味着我每次都必须传递相同数量的参数,即使其中一些参数不相关。

最终目标是减少编译行上的文件数量。我不想最终得到一个大的主文件和很多小的链接文件,我每次都必须拉进来。我只想有几个链接文件。目前,我所知道的唯一方法是我的函数查找或创建一个包含所有链接函数的库。

我想知道是否有更好的方法。例如,是否有一些东西可以允许在单个来源中进行多个链接部分或程序划分?

COBOL 联动

评论

1赞 Rick Smith 2/19/2023
对于一个源中的多个程序,请参阅:多个 Cobol 子例程可以位于同一模块中吗?未使用的参数可能位于被调用程序的 和 过程除法标头中。对我来说,不清楚你是问一个还是两个。OMITTEDCALLOPTIONAL

答:

1赞 cup 2/20/2023 #1

这不是一个答案 - 答案在多个 Cobol 子例程是否可以在同一个模块 https://stackoverflow.com/a/48949229/2041317 中。这只是一系列示例供参考。定义了两个函数 - LN-FUNC 和 LN-OBJ-FUNC。

  1. 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.
    
  2. 使用嵌套程序。这些需要像这样嵌套

    (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.
  1. 使用条目

    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.