コンパイルする際のコンパイラのバージョンや種類をマクロによって区別することができる。
__GNUC__が定義されている。
__GNUC__にはメジャーバージョン番号が、__GNUC_MINOR__にはマイナーバージョン番号が、__GNUC_PATCHLEVEL__にはパッチレベルが入っている。__GNUC_PATCHLEVEL__はGCC3より導入された。
例
#ifdef __GNUC__ cout<<"GNU C/C++ "<<__GNUC__<<"."<<__GNUC_MINOR__; #ifdef__GNUC_PATCHLEVEL__ cout<<"."<<__GNUC_PATCHLEVEL__; #endif cout<<endl; #endif
__APPLE__ __APPLE_CC__
の2つがある。
__APPLE__はすべてのApple製品に定義されている。なお、AppleのOSに標準のgccのみならず、インテルコンパイラなど他の会社の製品を使ってもApple製のOS上でコンパイルする限り定義されている。
__APPLE_CC__はコンパイラのバージョンが整数値で入っている。大きい数値ほど新しいコンパイラ。
TARGET_OS_MAC TARGET_OS_IPHONE TARGET_IPHONE_SIMULATOR TARGET_OS_EMBEDDED
は
#import <TargetConditionals.h>
で定義されている。判別には#ifdefではなく#ifを使う。
TARGET_OS_MACはOSX、iOS、iOSシミュレータすべての場合に定義されている。
TARGET_OS_IPHONEはiOS、iOSシミュレータの場合に定義されている。iOSかOSXかどうかを区別する場合は、これが定義されているかどうかで判別する。
TARGET_IPHONE_SIMULATORはiOSシミュレータの場合のみ定義されている。
TARGET_OS_EMBEDDEDは逆にiOSの実機の場合のみに定義されている。
例
#if (TARGET_IPHONE_SIMULATOR) // iOSシミュレータの場合のコード #else // 実機の場合のコード #endif
__INTEL_COMPILERが定義されている。
__INTEL_COMPILERには、マイナーバージョンも含めてバージョン番号を100倍した数値が入っている。
また、__INTEL_COMPILER_BUILD_DATEはビルドされた日付が入っている。
例
#ifdef __INTEL_COMPILER cout<<"Intel Compiler "<<__INTEL_COMPILER/100.0<<" build "<<__INTEL_COMPILER_BUILD_DATE<<endl; #endif
__BORLANDC__が定義されている。
__CUDACC__が定義されている。
最終更新日