2

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

在我们在 as/400 上的大多数程序中,我们需要更改激活组的处理方式(因为默认行为根本没有用......)。每次编译其中一个程序时,我都必须记住设置编译器选项(在 PDM 中: enter 14、 hit F4、 change DFTACTGRPfrom *YESto *NO、 hit enter、 change ACTGRPto *NEWor *CALLER,具体取决于程序)。所以我们有很多程序开头都有注释,有大量的感叹号,提醒程序员这样做。是的,有时你会忘记。

有什么诀窍,让你不必记住自己吗?

4

3 回答 3

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

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

于 2012-07-19T13:42:11.213 回答
2

@kratenko 建议之外的另一种方法。如果您有默认的公司设置,您可以使用更改命令默认值CHGCMDDFT。例如CHGCMDDFT CRTBNDRPG 'DFTACTGRP(*NO)'等等.. 我们这里的做法是始终将设置设置为 H-spec,特别是对于一些特殊的非标准设置。如果有人忘记了,将使用默认的公司设置。这种方法的一个问题是您更新的命令可能会在操作系统更新后重置。您可以使用两种方法之一

  1. 将所有 CHGCMDDFT 放入 CL 代码中,并在每次操作系统升级后重新运行
  2. 复制,CHGCMDDFT 所需的库命令并将此库放入系统库列表

我们更改了相当多的其他命令默认值,我更喜欢上面的方法 1。希望这可以帮助

于 2012-07-20T04:18:35.037 回答
1

H 规范绝对是 99% 程序的前进方向,但有时您会发现无法在 h 规范中设置的编译器选项。我过去使用过源代码控制软件,它将这些选项作为注释添加到源代码标题中,并在编译时自动应用它。为了解决在不同机器上编译的问题,我们编写了自己的编译实用程序来读取这些注释。这是一个相当简单的 CL 程序,您只需要决定注释的格式。

于 2012-09-11T09:27:27.837 回答