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