您能给我一些关于查看文件的想法吗?如何区分 RPG 字帖和程序?
例如,在c中,如果文件中有main,则知道它可以用作程序。
提前致谢。
这是一个有趣的问题……通常很明显。
我想快速的答案是抄本不会包含不同类型的规范。RPG IV 程序可以具有 H、F、D、I、C、O 和 P 规范,或它们的自由形式等价物。(规格类型由固定格式来源第6栏的字母确定)。顺序很重要,您不能混合类型。如果您正在查看只有一种规格的源,它可能被设计为一个字帖。由于可执行代码包含在 C(计算)和/或 P(过程)规范中,因此没有任何 C 或 P 规范的源代码就是抄写本。虽然在字帖中包含 C 或 P 规范通常是不好的做法,但 RPG 确实允许这样做,而且我已经看到它做到了。但同样,抄本中唯一的内容是 C 或 P 规格。
编辑 您可以拥有一本包含例如 F 和 D 规范的字帖,但唯一可以包含它的地方是在任何 D 规范之前的程序 F 规范的末尾。 您可以拥有一个利用编译器指令/IF DEFINED
来控制该字帖的哪些部分包含在何处的字帖。
EDIT2原来 IBM 在 7.1 及更高版本中添加了混合 F&D 规范的能力。只有 F 和 D 规范的源成员将是一本抄写本 所以简短的答案变成了,具有定义(H、F、D、I、O)规范和可执行(C&P)规范的源成员旨在被编译.
更长的答案,一个RPG程序也有一个“主”。最初,唯一的选择是现在所谓的“循环主”。IE。“主”过程是内置于 RPG 程序中的隐式生成的“循环”代码。
然后出现了 RPG IV 和 ILE。IBM 添加了一个控制规范关键字NOMAIN
.
H NOMAIN
//or in freeform
ctl-opt nomain;
这导致了一个没有“主”过程的不可执行的模块;编译器通常为“循环”生成的代码被忽略了。生成的 *MODULE 对象需要与提供主过程的另一个 *MODULE 绑定到 *PGM 对象中。
或者它可以与零个或多个其他 *MODULE 对象绑定到 *SRVPGM 对象中;*SRVPGM 只是程序的集合。将它们视为 Windows DLL。
然后,IBM 添加了拥有“线性主”RPG IV 程序的选项。
H MAIN(MYMAIN)
// or freeform
ctl-opt main(MYMAIN);
因此,主要程序是您指定的任何程序。生成的“循环”代码再次被排除在可执行文件之外。
所以NOMAIN
orMAIN
关键字的存在都表明源成员被设计为可编译的;假设还有更多的来源。可能有一个“标准选项”包含文件,其中包含其中之一。
缺少这两个关键字表明您正在处理循环主文件或包含文件。
如果它是一个循环主程序并且它以参数为输入,你将能够看到入口参数列表
//Fixed format, old school RPG III, IV
C *ENTRY PLIST
C PARM LCMPNO 2
C PARM LNTACT 1
// fixed format, RPG IV using a "Procedure Interface (PI) to replace *ENTRY PLIST
D CheckDate PI
D lDateIs 4a
// free format RPG IV
dcl-pi CheckDate;
lDateIs char(4);
end-pi;
请注意,使用 PI 而不是使用 PI 的“循环主”程序与线性主程序之间的主要区别在于*ENTRY PLIST
线性主程序被显式程序定义包围。
// linear main
h main(CHECKDATE)
p CheckDate b
d CheckDate PI
d lDateIs 4a
//do something
*INLR = *ON
return;
p CheckDate e
//cycle main with PI
d lDateIs 4a
//do something
*INLR = *ON
return;
从 7.1 开始(使用 2013 年的自由格式 PTF),您可以混合使用 F 和 D 规范(即使是固定格式的代码)。
imports
rpg copy book在现代编程语言中非常接近
抄写本应该更像 C 或 C++ 中的头文件。不幸的是,它没有那个有用的 .h 扩展器来保持分开。商店标准在这里会有所帮助。您可以将字帖保存在单独的源文件中,甚至可以使用特定的前缀或后缀来命名它们以表明它是字帖。我已经看到像 _ 或 _h 这样的后缀用于字帖,其中基本名称与它作为头文件的源成员相同。或者如果字帖和程序源存储在不同的源文件中,则程序和它的头文件将具有相同的名称。
与 C 一样,RPG4 可以具有可以编译为程序的源文件和可以编译为模块的源文件(模块是 IBM i 术语,很像其他平台上的 C 编译器生成的未链接的 .obj 文件)或完全链接的可执行程序。为了将 RPG 源代码编译为完全链接的可执行文件,它需要一个主过程。Charles 解释了 h 规范的 main 和 nomain 关键字。如果程序源没有 nomain 关键字,则可以将其生成为完全链接的程序。不过要小心,即使它不常见,h 规范也可以在其他地方,比如在他们自己的字帖中,或者在数据区域中。