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