有没有办法为程序源指定,在编译期间应该使用哪些激活组选项?
在as / 400上的大多数程序中,我们需要更改激活组的处理(因为默认行为根本没有用......)。每当我编译其中一个程序时,我必须记住设置编译器选项(在PDM中:输入14
,点击F4
,将DFTACTGRP
从*YES
更改为{ {1}},点击*NO
,将enter
更改为ACTGRP
或*NEW
,具体取决于计划)。因此,我们在开始时有很多带有注释的程序,有大量的惊叹号,提醒程序员这样做。是的,有时你会忘记。
有没有诀窍,所以你不必记住自己?
答案 0 :(得分:5)
您可以在RPGLE或CLLE程序源中设置这些编译器选项。
在 RPG 中,您可以使用源代码顶部的H-Specs来设置编译器选项。像这样:
HDFTACTGRP(*NO) ACTGRP(*CALLER)
只需将其添加到您拥有的任何其他内容中,例如:
H DEBUG DATEDIT(*YMD)
H DFTACTGRP(*NO) ACTGRP(*CALLER)
H BNDDIR('SRVBNDDIR')
H MAIN(main)
F OUTPUT O F 3000 DISK USROPN
D ...
* procedures, etc.
在 CL 中,有一个特殊的命令DCLPRCOPT
,它实际上不是一个命令(因为它在运行时没有执行),而是一种设置编译器选项的方法。
DCLPRCOPT DFTACTGRP(*NO) ACTGRP(*CALLER)
将它放在程序的顶部。我通常把它放在变量声明之后和任何真正的命令之前。我还添加了一个简短的评论,因为我不认为每个可能正确我的代码的人都会理解在那里做了什么:
PGM PARM(&SOMEPARM)
DCL VAR(&SOMEPARM) TYPE(*CHAR) LEN(*64)
DCL VAR(&COUNTER) TYPE(*DEC) LEN(5 0)
/* Setting options for compilation of this program */
/* This is a permanent job, so we want a *NEW activation group. */
DCLPRCOPT DFTACTGRP(*NO) ACTGRP(*NEW)
/* do actual work here in a loop */
/* ..... */
ENDPGM
现在,当您编译程序时(只需在PDM中输入14
并按Enter键),它将以您在源中指定的激活组行为结束。没有什么可以记住自己了。
答案 1 :(得分:2)
除了@kratenko建议之外的另一种方法。如果你有默认的公司设置,你可以使用CHGCMDDFT
更改命令默认值。例如CHGCMDDFT CRTBNDRPG 'DFTACTGRP(*NO)'
等等。我们的做法是始终将设置放在H-spec上,特别是对于某些特殊的非标准设置。如果有人忘了,将使用默认的公司设置。此方法的一个问题是更新的命令可能会在操作系统更新后重置。您可以使用2种方法之一
我们改变了很少的其他命令默认值,我更喜欢上面的方法1。 希望这有帮助
答案 2 :(得分:1)
H规格肯定是99%的程序中的前进方向,但偶尔你会找到一个无法在h规范中设置的编译器选项。我过去使用过源控制软件,它将这些选项添加为源标题中的注释,并在编译时自动应用它。为了解决在不同机器上编译的问题,我们编写了自己的编译实用程序,可以读取这些注释。这是一个相当简单的CL程序,你只需要决定评论的格式。