IBM i和z/OS的单一源代码



我主要是一名C开发人员,而不是一名普通的COBOL开发人员。我希望我的COBOL程序在IBM-I上具有与在z/OS上相同的源代码。

我的COBOL程序调用一个子例程。在z/OS上,我这样调用:

CALL                                      
'PBFNInit' USING                        
BY VALUE NULL-POINTER,

在IBM上,我必须这样称呼:

CALL PROCEDURE
'PBFNInit' USING                        
BY VALUE NULL-POINTER,

有没有什么方法可以动态地告诉COBOL编译器要使用CALL语句的哪种格式?

我希望得到一些动态语句,比如这个控制的调试语句

SOURCE-COMPUTER. IBM-3270 WITH DEBUGGING MODE.

如果编译器支持条件编译,可以使用编译器指令定义一个常量,然后。。。

>>EVALUATE TRUE
>>WHEN DEFINED IBM-Z
CALL 'PBFNInit' USING                        
BY VALUE NULL-POINTER, [...]
>>WHEN DEFINED IBM-I
CALL PROCEDURE 'PBFNInit' USING                        
BY VALUE NULL-POINTER, [...]
>>WHEN OTHER
!non-sequiter, your facts do not coordinate
>>END-EVALUATE

每条评论更新1条。。。

你可以试着把这个答案和@SimonSobisch的答案结合起来,比如。。。

>>IF DEFINED IBM-I
REPLACE ==CALL== BY ==CALL PROCEDURE==.
>>END-IF
CALL 'PBFNInit' USING                        
BY VALUE NULL-POINTER, [...]

文档中目前没有任何内容表明有条件编译的文本必须是有效代码。也许作者觉得这是隐含的,或者这是一个错误。

WITH DEBUGGING MODE在每个文件中都是一个小的更改,但也与实际的COBOL功能重叠。

如果";"微小变化";对你来说可以,那么只编码CALL PROCEDURE并使用单个

REPLACE ==CALL PROCEDURE== BY ==CALL==

在源中。

如果所有的调用都应该是过程调用,那么您似乎可以通过compile或process选项上的参数为所有调用设置这一点。

https://www.ibm.com/docs/en/i/7.4?topic=program-识别被称为程序过程的链接类型

上面写着

CRTCBLMOD和CRTBNDCBL命令的LINKLIT参数,或关联的PROCESS语句选项。

CRTCBLMOD和CRTBNDCBL命令的LINKLIT参数允许您可以在编译时指定所有外部的链接类型CALL文字-1、CANCEL文字-1或SET过程指针数据项ILE COBOL程序中的TO ENTRY literal-1语句。你没有需要在SPECIAL-NAMES段落中指定LINKAGE TYPE子句或带有CALL、CANCEL或SET…ENTRY的LINKAGE TYPE短语当链接已由LINKLIT参数定义时的语句CRTCBLMOD或CRTBNDCBL。

我不使用这些编译器,也不开发基础设施SPL,但如果必须的话,因为PROCEDURE这个词是IBMi上编译器的唯一区别,我会像这个一样

  • 当然,正如piet所说。2022年4月1日

    DEFINE(IBM-I(作为编译选项,并添加>gt;将IBM-I定义为COBOL源中的PARAMETER

  • 在您的cobol源中,只需确保在需要时添加PROCEDURE单词

    CALL 
    >>IF IBM-I DEFINED 
    PROCEDURE
    >>END-IF
    'PBFNInit' USING                        
    BY VALUE NULL-POINTER, [...]
    

相关内容

  • 没有找到相关文章

最新更新