如何在RPG或CL程序中为激活组设置编译器选项?

kra*_*nko 2 rpg compiler-flags rpgle compiler-options ibm-midrange

有没有办法为程序源指定,在编译期间应该使用哪些激活组选项?

在as/400上的大多数程序中,我们需要更改激活组的处理(因为默认行为根本没有用...).每次我编的程序之一,我一定要记得设置编译器选项(这是在PDM:进入14,打F4,变化DFTACTGRP来自*YES*NO,打enter,变化ACTGRP*NEW或者*CALLER,这取决于程序).因此,我们在开始时有很多带有注释的程序,有大量的惊叹号,提醒程序员这样做.是的,有时候你会忘记.

有没有诀窍,所以你不必记住自己?

kra*_*nko 5

您可以在RPGLE或CLLE程序源中设置这些编译器选项.

RPG中,您可以使用源代码顶部的H-Specs来设置编译器选项.像这样:

HDFTACTGRP(*NO) ACTGRP(*CALLER)
Run Code Online (Sandbox Code Playgroud)

只需将其添加到您拥有的任何其他内容中,例如:

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.
Run Code Online (Sandbox Code Playgroud)

CL中,有一个特殊的命令DCLPRCOPT,它实际上不是一个命令(因为它在运行时没有执行),而是一种设置编译器选项的方法.

DCLPRCOPT DFTACTGRP(*NO) ACTGRP(*CALLER)
Run Code Online (Sandbox Code Playgroud)

只需将它放在程序的顶部即可.我通常把它放在变量声明之后和任何真正的命令之前.我还添加了一个简短的评论,因为我不认为每个可能正确我的代码的人都会理解在那里做了什么:

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
Run Code Online (Sandbox Code Playgroud)

现在,当您编译程序时(只需输入14PDM并按Enter键),它将以您在源中指定的激活组行为结束.没有什么可以在那里记住自己.

  • DCLPRCOPT与OS/400的CL编译器的V5R4M0一起添加.如果您使用的是先前的操作系统版本(或者如果您使用TGTRLS()到先前版本),则尝试使用DCLPRCOPT将获得CPD0030(未找到库*LIBL中的命令DCLPRCOPT). (2认同)