我如何在 COBOL 中 return 为真

How can I return true in COBOL

所以我正在制作一个程序来检查一个数字是否可以被另一个数字整除。如果它应该 return 为真,否则为假。这是我目前所拥有的。

P.S : 我正在使用 IBM (GnuCOBOL v2.2 -std=ibm-strict -O2) 到 运行 这个。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CHECKER.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 BASE           PIC 9(5).
       01 FACTOR         PIC 9(2).
       01 RESULT     PIC 9(5).
            88 TRU  VALUE 0 .
            88 FAL  VALUE 1 THRU 99 .
       PROCEDURE DIVISION.
       CHECK-FOR-FACTOR SECTION.
            IF FUNCTION MOD(BASE, FACTOR) = 0 THEN
                  SET TRU TO TRUE
            ELSE
                  SET FAL TO TRUE
            END-IF.
       END PROGRAM CHECKER.

它给我错误提示 level 88 的使用无效。我确定我犯了一个错误,我已经搜索了几天,但似乎找不到任何可以帮助我的东西。如果在 COBOL 中可行或 COBOL 是否以其他方式处理所有布尔值,有什么想法吗?

(请不要回复查找 88 级或其他类似的东西,我已经查找过它们但他们没有帮助)

要从程序中 return TRUE,您需要一个具有布尔值 USAGE 的实现,在 LINKAGE 中定义它并在 [=13= 中指定它] 并使用 CALL 'yourprog' RETURNING true-item.

您指定的环境 GnuCOBOL 在 2021 年没有布尔值 USAGE,无法处理程序中 PROCEDURE DIVISIONRETURNING 短语。

但是您可以使用一个非常常见的 COBOL 扩展,它在 IBM 和 GnuCOBOL 中都可用:

在程序结束前MOVE RESULT TO RETURN-CODE(这是一个全局寄存器)并在调用程序中检查它的值(并将其重置为零)。 然后由您决定什么值表示“真”(在您的程序中它是0)。

作为替代方案,您 可以 创建一个用户定义函数(FUNCTION-ID 而不是 PROGRAM-ID 并使用 RETURNING 短语来传递你的结果) - 但这意味着你需要在每个来电者中使用 IF FUNCTION 而不是 CALL + IF RETURN-CODE