我主要是一个C开发人员,而不是一个常规的COBOL开发人员。我希望我的COBOL程序在IBM上拥有与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.
发布于 2022-03-31 13:24:04
如果您的编译器支持条件编译,则可以使用编译器指令进行定义常量,然后.
>>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每条评论更新一条..。
你可以尝试把这个答案和@SimonSobisch的答案结合起来,就像.
>>IF DEFINED IBM-I
REPLACE ==CALL== BY ==CALL PROCEDURE==.
>>END-IF
CALL 'PBFNInit' USING
BY VALUE NULL-POINTER, [...]目前文档中没有任何内容表明正在有条件编译的文本必须是有效代码。也许作者认为这是隐含的,也可能是错误。
发布于 2022-03-31 14:44:58
WITH DEBUGGING MODE将是每个文件中的一个小变化--但也与实际的COBOL功能重叠。
如果“小更改”对您来说是可以的,那么只需编写CALL PROCEDURE代码并使用单个
REPLACE ==CALL PROCEDURE== BY ==CALL==。
在源头。
发布于 2022-04-01 13:07:10
如果您的所有调用都应该是过程调用,那么看起来您可以为所有带有编译或进程选项中的参数的调用设置它。
https://www.ibm.com/docs/en/i/7.4?topic=program-identifying-linkage-type-called-programs-procedures
上面写着
CRTCBLMOD和CRTBNDCBL命令的LINKLIT参数,或关联的PROCESS语句选项。 CRTCBLMOD和CRTBNDCBL命令的LINKLIT参数允许您在编译时指定ILE COBOL程序中所有外部调用文字-1、取消文字-1或将过程-指针-数据-项目设置为条目文字-1语句的链接类型。您不需要在特殊名称段落或带有调用、取消或设置…的链接类型短语中指定链接类型子句。链接由CRTCBLMOD或CRTBNDCBL的LINKLIT参数定义时的ENTRY语句。
https://stackoverflow.com/questions/71692473
复制相似问题