プロシージャーに、入力専用に使われる BYADDR パラメーターが含まれている場合は、 そのパラメーターを NONASSIGNABLE として宣言する のが (ASSIGNABLE のデフォルト属性を取得させるのではなく) 最良の方法です。 プロシージャーがあとからそのパラメーターの定数を使って呼び出された場合、 コンパイラーは静的ストレージに定数を入れ、その静的領域のアドレスを渡します。
この方法は、レジスターに渡すことができないストリングや その他のパラメーターに特に役立ちます (レジスターに渡すことができる 入力専用パラメーターは、BYVALUE として宣言するのが最良です)。
例えば次の宣言では、getenv に対する 最初のパラメーターが、入力専用の CHAR VARYINGZ ストリングです。
dcl getenv entry( char(*) varyingz nonasgn byaddr,
pointer byaddr )
returns( native fixed bin(31) optional )
options( nodescriptor );
ストリング「IBM_OPTIONS」が指定されてこの関数が呼び出されると、 コンパイラーは、コンパイラー生成一時記憶域にそのストリングを割り当て、 その領域のアドレスを渡すのではなく、ストリングのアドレスを渡すことができます。