These search terms have been highlighted:[c++]
2008-10-06
ふと気になって,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# プリプロセッサ ディレクティブ.