しのはらのC++実験室トップページ
「移植性の高いプログラムの書き方」トップページ
さて、コンパイラ毎に異なるコードを書くにはどうすればよいか。最新のANSI C++のサポート状況
組込み型のサイズなど、処理系依存部の仕様
標準ライブラリの実装
(複雑な)ANSI C++仕様の解釈
#ifdef
や
#endif
などのプリプロセッサ指令を使って実現します。
#ifdef UseMain
int main()
{
/* .... */
}
#endif
このコードでは、
このコードよりも前でUseMain
というマクロが定義されていた場合に限って、
このmain関数が定義されます。
このコードはdefined()
を使って次のように書くこともできます。
#if defined(UseMain)
int main()
{
/* .... */
}
#endif
事前定義マクロ | 処理系 |
__BORLANDC__ | Turbo C++/Borland C++/C++Builder |
__WATCOMC__ | Watcom C/C++ |
_MSC_VER | Microsoft C/Visual C++ |
__CINT__ | C++インタプリタCINT |
__CYGWIN__ | CygwinのGCC |
#if defined(__CINT__)
/* ...CINTのためのコード... */
#elif defined(__BORLANDC__)
/* ...Borland製コンパイラのためのコード... */
#elif defined(__WATCOMC__)
/* ...Watcom C/C++のためのコード... */
#elif defined(_MSC_VER)
/* ...Microsoft C/Visual C++のためのコード... */
#elif defined(__CYGWIN__)
/* ...cygwinのためのコード... */
#else
/* ...その他のコンパイラのためのコード... */
#endif