我是 Cobol 的新手,我很难弄清楚如何使用这些结构。下面的 C 结构在转换为 Cobol 时会是什么样子?
这些是我拥有的结构:
struct dataT
{
int m;
};
struct stack
{
int top;
struct dataT items[STACKSIZE];
} st;
这个语句在 Cobol 中如何表示?
st.items[st.top].m
最佳答案
这完全是在摸黑,因为我在今天之前从未写过一行 COBOL1。然而,经过一点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.
是的,size 硬编码为 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 编写的,所以花一些时间来学习它不会有什么坏处。
2. 我不能保证本教程的质量;这是我发现的第一个似乎相当完整且易于阅读的文章。
关于c - 这个 C 结构如何被翻译成 Cobol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29395215/