COBOL将0添加到COMPUTE中的变量

bha*_*mby 3 db2 cobol zos

在使用$ WORK处理COBOL程序时,我遇到了一个奇怪的声明.

我们有一个段落打开游标(来自DB2),并在它上面循环直到它到达EOT(在伪代码中):

... working storage ...
01  I                       PIC S9(9) COMP VALUE ZEROS.
01  WS-SUB                  PIC S9(4) COMP VALUE 0.

... code area ...
PARA-ONE.                                                
    PERFORM OPEN-CURSOR
    PERFORM FETCH-CURSOR

    PERFORM VARYING I FROM 1 BY 1 UNTIL SQLCODE = DB2EOT                        
        do stuff here...
    END-PERFORM                                           

    COMPUTE WS-SUB = I + 0                            
    PERFORM CLOSE-CURSOR

    ... do another loop using WS-SUB ...
Run Code Online (Sandbox Code Playgroud)

我想知道为什么那条COMPUTE WS-SUB = I + 0线在那里.我的理解是,I至少总是如此1,因为它上面的执行块(即,即使有一个EOT开始,I也会在初始迭代时设置为1).

COMPUTE条线甚至需要吗?它是否正在做一些我不知道的隐式演员?它为什么会在那里?你为什么不MOVE I TO WS-SUB呢?

Nea*_*alB 6

称之为愚蠢,但有一些编译器(有效的正确选项),给定

 01  SIGNED-NUMBER   PIC S99 COMP-5 VALUE -1.
 01  UNSIGNED-NUMBER PIC  99 COMP-5.
      ... 
      MOVE SIGNED-NUMBER TO UNSIGNED-NUMBER
      DISPLAY UNSIGNED-NUMBER
Run Code Online (Sandbox Code Playgroud)

结果:255.但......

COMPUTE UNSIGNED-NUMBER = SIGNED-NUMBER + ZERO
Run Code Online (Sandbox Code Playgroud)

结果:1(未签名)

因此,为了回答您的问题,可以将其归类为使用强制签名数字转换为无符号数字的技术.但是,在你给它的代码示例中根本没有任何意义.