_tolowerマクロは,引数が大文字でなくてはならない (小文字や EOF であってはならない) ことを除けば,
tolower関数と等価です。
OpenVMS Version 8.3 では,
_tolowerマクロの仕様が C99 ANSI 標準と X/Open 仕様に準拠するように変えられて,特に指定しない限りはパラメータを複数回評価しないようになっています。その結果,
_tolowerマクロは
tolower関数を単に呼び出すだけとなり,式を評価する回数をユーザが指定できる場合の副作用 (i++ や関数呼び出しなど) を回避できるようになりました。
_tolowerマクロの動作を最適化された古い仕様のままで維持したい場合は, /DEFINE=_FAST_TOUPPER を指定してコンパイルします。そうすれば,
_tolowerの呼び出しが以前のリリースと同じように最適化されるので,実行時の呼び出しオーバヘッドを避けることができます。ただし,その場合はパラメータがチェックされて計算方法が決定されるので,予期しない副作用が発生することがあります。そのため,/DEFINE=_FAST_TOUPPER を指定してコンパイルした場合は,副作用を引き起こしそうな引数を
_tolowerマクロで使用しないでください。たとえば,次の例のようにこのマクロを使用しても,期待した結果は得られません。