我对Cobol很陌生,而且我很难弄清楚如何使用这些结构。当它们转换成Cobol时,下面的C结构会是什么样的?
这些是我的结构:
struct dataT
{
int m;
};
struct stack
{
int top;
struct dataT items[STACKSIZE];
} st;
这句话如何在Cobol中表现出来?
st.items[st.top].m
答案 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-TOP
和WS-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.