つい少し前のまで、会社のIBMiはV5R4だったので、V7R2になっていつの間にか色々な機能が増えています。その一つにV6R1以降でコンパイルオプションに「*NOUNREF」を付ける事が出来る様になってます。
「*NOUNREF」をつけると、未使用の変数を実行モジュールに含まなくなるため、静的記憶域が節約出来ます。よく共通のヘッダーファイルをインクルードしたりすると、無駄に変数を引っ張って来ますが、このオプションで未使用の変数は、オブジェクトに引き込まれない為、精神衛生上とても良いです。
以下のソースでオプション有無をDSPPGMで見ると、静的記憶域に違いがあります。
USR401A.rpgle
H****************************************************************
H*-‚------------------------------*
H*-‚---<<日付・著作権 >>-----*
H*-‚------------------------------*
H DATEDIT(*YMD)
H COPYRIGHT('(C) ushiday - ')
H*-‚------------------------------*
H*-‚---<<コンパイル条件 >>-----*
H*-‚------------------------------*
H DFTACTGRP(*NO) ACTGRP(*NEW)
H*非参照の変数を取り込む
H OPTION(*UNREF)
F*-š---<<ファイル定義 >>-----*
D*-š---<<変数定義 >>-----*
D*
D REC E DS EXTNAME(ITEM : *INPUT)
D QUALIFIED
D DIM(5000)
C*-‚------------------------------*
C*-‚---<<メインルーチン >>-----*
C*-‚------------------------------*
/FREE
//終了
*INLR = *ON ;
RETURN ;
/END-FREE
USR401A.rpgle
H****************************************************************
H*-‚------------------------------*
H*-‚---<<日付・著作権 >>-----*
H*-‚------------------------------*
H DATEDIT(*YMD)
H COPYRIGHT('(C) ushiday - ')
H*-‚------------------------------*
H*-‚---<<コンパイル条件 >>-----*
H*-‚------------------------------*
H DFTACTGRP(*NO) ACTGRP(*NEW)
H*非参照の変数を取り込む
H OPTION(*NOUNREF)
F*-š---<<ファイル定義 >>-----*
D*-š---<<変数定義 >>-----*
D*
D REC E DS EXTNAME(ITEM : *INPUT)
D QUALIFIED
D DIM(5000)
C*-‚------------------------------*
C*-‚---<<メインルーチン >>-----*
C*-‚------------------------------*
/FREE
//終了
*INLR = *ON ;
RETURN ;
/END-FREE