プリプロセッサ #warning は非標準

ふと気になって,C++プリプロセッサ・ディレクティブ (Preprocessing directives) を調べてみた.ソースは ISO/IEC 14882:1998 (E).gcc/g++ で何気なく使っていた #warning は標準じゃないことを知った.
gcc/g++ で,

#warning warning message is displayed

とか書いておくと,コンパイル時に

preproc-dir.cpp:39:2: warning: #warning warning message is displayed

みたいな警告を出してくれる. #error ディレクティブだとエラー終了するが, #warning だと終了しないので,単純にメッセージを表示させたりするのに便利だ.

が,上記のように非標準だった.
試しに,

g++ -ansi -pedantic preproc-dir.cpp

のようにして,厳密に ansi 標準のコンパイルをするようにしたところ,

preproc-dir.cpp:39:2: warning: #warning is a GCC extension

という警告が出て, #warning は gcc/g++ の拡張だということが判明.

移植性を考えると,あまり使わない方がよさそうだ.

ちなみに C# にも #warning ディレクティブが定義されているようだ:C# プリプロセッサ ディレクティブ