你能给我一些关于查看文件的想法吗?我如何区分RPG文案和程序?
例如,在c中,如果文件中有main,则知道它可以用作程序。
提前谢谢。
这是一个有趣的问题。。。这通常是非常明显的。
我想快速的答案是,复印本不会包含不同类型的规范。RPG IV程序可以有H、F、D、I、C、O和P规范,或者它们的自由形式等价物。(规格类型由固定格式源第6列中的字母决定)。顺序很重要,你不能把类型混合在一起。若您所查看的源代码只有一种类型的规范,那个么它很可能被设计为一本文案。由于可执行代码包含在C(计算)和/或P(过程)规范中,因此没有任何C或P规范的源代码就是一本副本。虽然在文案中有C或P规范通常是不好的做法,但RPG确实允许这样做,我也看到过这样做。但同样,副本中唯一的东西是C或P规格。
EDIT
您可以使用例如F&D规格,但它唯一可以包含的地方是在任何D规格之前的程序的F规格的末尾 您可以有一个使用编译器指令/IF DEFINED
来控制复制本的哪一部分包含在哪里的复制本。
EDIT2发现IBM增加了将F&7.1及更高版本中的D规格。一个只有F&D规范将是一本文案所以简单的答案是,一个同时具有定义(H,F,D,I,O)规范和可执行(C&P)规范的源成员被设计为要编译的。
答案越长,RPG程序也有一个"main"。最初,唯一的选择是现在所说的"循环主"。IE。"main"过程是隐式生成的"cycle"代码,内置于RPG程序中。
接着是RPG IV和ILE。IBM添加了一个控制规范关键字NOMAIN
。
H NOMAIN
//or in freeform
ctl-opt nomain;
这导致了一个没有"主"过程的不可执行模块;编译器通常为"循环"生成的代码被忽略了。生成的*MODULE对象将需要绑定到一个*PGM对象中,该对象具有另一个提供主过程的*MODURE。
或者它可以与零个或多个其他*MODULE对象绑定到一个*SRVPGM对象中*SRVPGM只是程序的集合。把它们想象成Windows DLL。
然后,IBM增加了一个"线性主"RPG IV程序的选项。
H MAIN(MYMAIN)
// or freeform
ctl-opt main(MYMAIN);
因此,主要程序是您指定的任何程序。生成的"循环"代码再次被排除在可执行文件之外。
因此,NOMAIN
或MAIN
关键字的存在将指示源成员被设计为要被编译;假设还有更多的来源。可能存在一个"标准选项"包含文件,其中包含其中一个选项。
缺少这两个关键字将表明您处理的是循环主文件或包含文件。
如果它是一个循环主程序,并且它将参数作为输入,您将能够看到条目参数列表
//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而不是*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年开始使用自由格式的PDF),您可以混合F和D规范(即使是固定形式的代码)。
rpg副本在现代编程语言
imports
应该像使用C或C++中的头文件一样使用副本。不幸的是,它将没有有用的.h扩展程序来保持事物的独立性。商店标准在这里会有所帮助。您可以将副本保存在一个单独的源文件中,甚至可以使用特定的前缀或后缀对其进行命名,以表明它是一个副本。我在副本中看到过_或_h这样的后缀,其中基本名称与它作为头文件的源成员相同。或者在副本和程序源存储在不同的源文件中的情况下,程序及其头文件将具有相同的名称。
与C一样,RPG4也可以有可以编译成程序的源文件和可以编译成模块的源文件(模块是IBM的一个术语,很像其他平台上C编译器生成的未链接的.obj文件)或完全链接的可执行程序。为了将RPG源代码编译为完全链接的可执行文件,它需要一个主过程。Charles解释了h规范的主要关键字和正常关键字。如果程序源没有nomain关键字,则可以将其生成为完全链接的程序。不过要小心,即使它不常见,h规范也可以在其他地方,比如在他们自己的文案中,或者在数据区中。