关于 ibm midrange:在 CBLLE 中使用 POINTERS 传递数组

Passing Arrays using POINTERS in CBLLE

我的项目中有一个情况,我们必须使用指针检索数组中的值。我能够在我的被调用程序中获取指针值,其中数组位于工作存储部分,

在我的调用程序中,我能够检索指针值并在 LINKAGE 部分定义了数组以克服编译器的限制,并且没有在过程划分中使用该数组,但是我面临的程序是我无法获取数组中的所有元素。任何线索如何解决这个问题。


假设调用程序的LINKAGE SECTION中的数组与被调用程序的WORKING-STORAGE SECTION中的数组定义相同,(没有代码不清楚)那么COBOL 85提供了手段这样做没有指针。只需使用 EXTERNAL 子句。例如,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
   program-id. prog-1.
   data division.
   working-storage section.
   procedure division.
   begin.
       call"prog-2"
       call"prog-3"
       stop run
       .
   end program prog-1.

   program-id. prog-2.
   data division.
   working-storage section.
   1 xdata01 external pic x(1024).
   1 array redefines xdata01.
    2 array-item pic x(16) occurs 64.
   procedure division.
   begin.
       move all"abcd" to array
       exit program
       .
   end program prog-2.

   program-id. prog-3.
   data division.
   working-storage section.
   1 x binary pic 9(4).
   1 xdata01 external pic x(1024).
   1 array redefines xdata01.
    2 array-item pic x(16) occurs 64.
   procedure division.
   begin.
       perform varying x from 1 by 1
       until x > 64
           display array-item (x)
       end-perform
       exit program
       .
   end program prog-3.

abcdabcdabcdabcd
abcdabcdabcdabcd
abcdabcdabcdabcd
abcdabcdabcdabcd
abcdabcdabcdabcd
(64 lines total)

在本例中,prog-2 填充数组,prog-3 使用数组。 data-namexdata01(使用系统允许的任何名称)是系统使用的名称,以使两个程序都可以使用相同的未初始化内存。

就等价而言,ADDRESS OF xdata01是被调用程序中指向array的指针,因此不需要传递指针,甚至不需要使用一个;并且调用程序中array的定义与被调用程序中的定义相匹配,因此无需将array的定义放在LINKAGE SECTION中或使用指针访问数据。