Skip to content

数値を返す組み込み関数の結果をCALL引数として渡した場合に正しく表示されない #800

@tsh-hashimoto

Description

@tsh-hashimoto

概要

数値を返す組み込み関数(FUNCTION LENGTH, FUNCTION MEANなど)の結果をCALL文の引数として渡した場合、callee側で正しい値が表示されない。

原因

INTRINSIC関数がCOB_TYPE_NUMERIC_BINARY形式でデータを格納するのに対し、callee側がCOB_TYPE_NUMERIC_DISPLAY(ASCII数字)として解釈するため、バイナリデータがそのまま出力されてしまう。

再現コード

FUNCTION LENGTH の例

caller.cob:

       IDENTIFICATION   DIVISION.
       PROGRAM-ID.      caller.
       DATA             DIVISION.
       WORKING-STORAGE  SECTION.
       01 X             PIC X(5) VALUE "HELLO".
       PROCEDURE        DIVISION.
           CALL "callee" USING FUNCTION LENGTH(X)
           END-CALL.
           STOP RUN.

callee.cob:

       IDENTIFICATION   DIVISION.
       PROGRAM-ID.      callee.
       DATA             DIVISION.
       LINKAGE          SECTION.
       01 LEN            PIC 9(4).
       PROCEDURE        DIVISION USING LEN.
           DISPLAY LEN
           END-DISPLAY.
           EXIT PROGRAM.
  • 期待される出力: 0005
  • 実際の出力: ^@^@^@^@(NULLバイト4つ。バイナリ値がそのまま出力される)

FUNCTION MEAN の例

caller.cob:

       IDENTIFICATION   DIVISION.
       PROGRAM-ID.      caller.
       DATA             DIVISION.
       WORKING-STORAGE  SECTION.
       01 WS-NUM1       PIC 9(3)V9(2) VALUE 10.50.
       01 WS-NUM2       PIC 9(3)V9(2) VALUE 20.30.
       01 WS-NUM3       PIC 9(3)V9(2) VALUE 30.20.
       PROCEDURE        DIVISION.
           CALL "callee" USING
               FUNCTION MEAN(WS-NUM1 WS-NUM2 WS-NUM3)
           END-CALL.
           STOP RUN.

callee.cob:

       IDENTIFICATION   DIVISION.
       PROGRAM-ID.      callee.
       DATA             DIVISION.
       LINKAGE          SECTION.
       01 X             PIC 9(3)V9(2).
       PROCEDURE        DIVISION USING X.
           DISPLAY X
           END-DISPLAY.
           EXIT PROGRAM.
  • 期待される出力: 020.33
  • 実際の出力: 文字化け(バイナリデータがそのまま出力される)

備考

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions