如何将这个C结构转换为Cobol

时间:2015-04-01 15:45:56

标签: c cobol

我对Cobol很陌生,而且我很难弄清楚如何使用这些结构。当它们转换成Cobol时,下面的C结构会是什么样的?

这些是我的结构:

struct dataT
{
    int m;
};

struct stack
{
    int top;
    struct dataT items[STACKSIZE];
} st;

这句话如何在Cobol中表现出来?

st.items[st.top].m

2 个答案:

答案 0 :(得分:3)

在黑暗中这是一个非常刺激的事情,因为我在今天 1 之前从未写过一行COBOL。然而,经过一点googling 2 并在ideone中玩游戏,我想我至少已经捕捉到了代码看起来的样子,如果不是实际的话溶液:

IDENTIFICATION DIVISION.
PROGRAM-ID. IDEONE.

ENVIRONMENT DIVISION.

DATA DIVISION.
  WORKING-STORAGE SECTION.
  01 WS-STACK.
    05 WS-TOP PIC 9 VALUE 0.
    05 WS-ITEMS OCCURS 10 TIMES INDEXED BY I.
      10 WS-M PIC 9 VALUE 0.

PROCEDURE DIVISION.
    ADD 1 TO WS-TOP.
    MOVE 9 TO WS-M(WS-TOP).
    ADD 1 TO WS-TOP.
    MOVE 8 to WS-M(WS-TOP).
    DISPLAY "WS-STACK :" WS-STACK.
    DISPLAY "WS-TOP :" WS-TOP.
    DISPLAY "WS-ITEMS[WS-STACK.WS-TOP].M :" WS-M(WS-TOP).
    SUBTRACT 1 FROM WS-TOP.
    DISPLAY "WS-TOP :" WS-TOP.
    DISPLAY "WS-ITEMS[WS-STACK.WS-TOP].M :" WS-M(WS-TOP).
    STOP RUN.

是的,大小硬编码为10(不知道如何在COBOL中执行符号常量),WS-TOPWS-M只能存储0到9之间的值。

毋庸置疑,COBOL和C中的数据类型非常不同。我实际上没有创建一个新的堆栈类型;我已经声明了一个带有几个子项的数据项,其中一个子表是一个可以存储10个名为WS-M的实例的表。这实际上和写

相同
int main( void )
{
  int top = 10;
  int m[10];

  m[--top] = 9;
  m[--top] = 8;

  printf("top = %d\n", top );
  printf("m[%d] = %d", top, m[top] );
  top++;

  printf("top = %d\n", top );
  printf("m[%d] = %d", top, m[top] );
  return 0;
}
C中的

,主要区别在于我编写了C代码,使得堆栈“向下”增长(这更自然)。据我在COBOL教程中花了十分钟时间告诉我,COBOL实际上并没有等同于struct类型;即使数据项可以按层次方式分组,您也不会创建新的struct或记录类型。如果我想要多个堆栈,我必须声明多个独立的后备存储和索引变量。

我想。

我将不得不多做一些阅读。

<小时/> 1。在这一天的这一点上,我宁愿只在任何事情上工作,而不是现在面前的问题,而且我一直很好奇另一半的生活方式。此外,我正在开发一个网上银行平台,我知道我们的一半后端是用COBOL编写的,所以花时间学习它也不会有什么坏处。

我无法保证本教程的质量;这是我发现的第一个看起来相当完整且易于阅读的内容。

答案 1 :(得分:0)

你会这样做:

*> Not a symbolic constant, but if it is never referenced as a 
*> target of a move/compute, the compiler should recognize that.
*> and tune for that.

01 Stack-Size      Pic S9(8) comp-4   Value <<some-number>>.

*> The "comp-4" data type is a twos complement integer, S9(8) makes
*> it a 32-bit word.  Depending upon your compiler, you will sometimes
*> see "binary" or "comp-5"

01 My-Stack.
  02 Stack-Top     Pic S9(8) comp-4   Value 0.
  02 Stack-Items   occurs 0 to <<some-maximum-size>> 
                   depending on Stack-Size.
*>-------*
*> This is your data structure, if you made it a copybook, you would have 
*> the similar effect of having the struct def from the C code. You can
*> use the copy/replacing features if you need to make multipule data
*> items with different names. 
*>
    03 Stack-M     Pic S9(8) comp-5.
*>-------*

要访问堆栈顶部的当前值:

 Move Stack-M (Stack-Top) to where-ever

一些有用的段落:

 Pop-Stack.
     Move 0 to Stack-M (Stack-Top)
     Subtract 1 from Stack-Top
     Exit.

 Push-Stack.
     Add 1 to Stack-Top
     Move <<whatever value>> to Stack-M (Stack-Top)
     Exit.