引数が、属性 INONLY または OUTONLY で宣言されていない限り、引数は INOUT となり、その引数は、渡される前に値を持ち、呼び出されたコードによって (おそらく) 変更されるものと想定されます。
引数を INONLY として宣言した場合、引数が渡される前に引数は値を持ち、呼び出されたコードによっては変更されないものと想定されます。したがって、仮引数をそのような引数に対して作成する必要はありません。
引数を OUTONLY として宣言した場合、引数が渡される前に値を持たないが、呼び出されたコードによって設定されるものと想定されます。
属性 OUTONLY と BYVALUE は競合するため、同じ引数に両方を指定することはできません。
属性 INONLY と OPTIONAL も競合するため、同じ引数に両方を指定することはできません。
これらの属性を明示的に使用すると、コードがより自己記述的になります。 さらに、そうすることによって、コンパイラーがより良いコードを生成でき、未初期化のおそれのある変数のレポートでより正確になるようにすることができます。