Compilation 使用COBOL5编译器编译COBOL4

Compilation 使用COBOL5编译器编译COBOL4,compilation,cobol,zos,mvs,Compilation,Cobol,Zos,Mvs,我需要在z/OS UNIX上使用Cobol 4编译器编译Cobol源代码,但我只有一个Cobol 5编译器。是否有选项将COBOL5限制为COBOL4编译? 我正在使用cob2命令,该命令已安装到z/OS上Cobol安装的IGY520.HFS PDS上。 我在IBM文档中搜索了一下,但没有找到任何内容。COBOL 5程序与COBOL 4向后兼容(它们可以相互调用),但COBOL 5不生成COBOL 4对象模块。为什么需要COBOL4编译?我不知道。我认为以下内容可能有用 CMPR2、FLAGMI

我需要在z/OS UNIX上使用Cobol 4编译器编译Cobol源代码,但我只有一个Cobol 5编译器。是否有选项将COBOL5限制为COBOL4编译? 我正在使用cob2命令,该命令已安装到z/OS上Cobol安装的IGY520.HFS PDS上。
我在IBM文档中搜索了一下,但没有找到任何内容。

COBOL 5程序与COBOL 4向后兼容(它们可以相互调用),但COBOL 5不生成COBOL 4对象模块。为什么需要COBOL4编译?

我不知道。我认为以下内容可能有用

CMPR2、FLAGMIG和NOCOMPILE编译器选项

COBOL CMPR2, FLAGMIG和NOCOMPILE选项标识需要修改的源语句 转换为在企业COBOL下编译。CMPR2和FLAGMIG 选项在企业COBOL中不可用,但您可以使用 使用这些选项标记需要执行的语句的旧编译器 为了使用企业COBOL进行编译,必须对其进行更改

Enterprise COBOL>V4.2 FLAGMIG4编译器选项

新的编译器选项FLAGMIG4是 APAR PM93450 for Enterprise COBOL V4.2提供帮助 迁移到企业COBOLV5或V6。还建议您 安装APAR PI12240、PI26838和PI58762的PTF,因为它们包含 更新FLAGMIG4选项。FLAGMIG4选项标识 企业COBOL V4程序中不可用的语言元素 支持,或在Enterprise COBOL V5或中以不同方式支持的 V6。编译器将为所有此类事件生成警告诊断消息 语言元素


不。我强烈建议你学习和学习

报告中最常见的问题与旧编译器容忍的无效数据有关。引用上面链接的Tom Ross的共享演示文稿

程序是否显示“零”取决于 在COBOLV4和更早版本以及COBOLV6中使用的编译器选项

还要注意如何处理压缩数据的差异


NUMCHECK编译选项可以在这些情况下为您提供帮助,但请注意,编译选项不能在编译时检测无效数据,它们只能生成代码在运行时检测无效数据。

如果我用COBOL 5编译,我不确定我的程序是否与大多数z/OS兼容。COBOL5编译的对象是否需要在目标z/OS上安装特定的库,或者它们只是对象,而COBOL4对象是不可能工作的,而COBOL5是不可能的?另外,在我的源代码中有特定的COBOL4语法。COBOLV5将编译COBOLV4可以编译的程序;您将遇到的唯一语法问题是,您的程序是否碰巧使用了V5中的新保留字,如果是,则很容易修复。编译时不需要任何库。当您运行使用V5编译的程序时,您将需要V5运行时,但假设V5和LE(语言环境,COBOL运行时是其中的一部分)安装正确,这不会是一个问题。就与其他程序的兼容性而言,V5代码与任何旧的COBOL代码兼容,但使用OS/VS COBOL编译的代码除外。如果应用程序中的任何COBOL程序使用无效数据,您可能会看到行为上的差异。我每季度做一次关于迁移到COBOLV5/V6所面临挑战的演示,您可能希望了解这些挑战;可以在这里找到以前的录音和幻灯片:V4和V5编译代码之间有一个主要区别:EC V5以GOFF格式生成目标代码,绑定器使用该代码生成程序对象,而不是加载模块。因此,对于V5,要求所有加载库都是PDSE而不是PDS(我不确定对象库,但PDSE在这方面也没有坏处)。感谢您的详细回答
77 A1 PIC X(4) VALUE ’00 0’.  *> x’F0F040F0’, third byte
                              *> has x’4’ for zone bits.
                              *> OK in PIC X, not valid in
                              *> PIC 9 USAGE DISPLAY

77 A2 REDEFINES A1 PIC 9(4).

PROCEDURE DIVISION.    
    IF A2 = ZERO              *> Compiler could do character
      DISPLAY ’ZERO‘          *> or numeric compare
    ELSE
      DISPLAY ’NOT ZERO‘
    END-IF