定義済みマクロ

この記事では、ANSI/ISO C99 実装および Microsoft C++ 実装の定義済みプリプロセッサ マクロの一覧を示します。

コンパイラは、定義済みの ANSI C99 実装の C プリプロセッサ マクロのほかに、Microsoft C++ 実装のいつくかの定義済みマクロも認識します。 これらのプリプロセッサ マクロは引数を取らず、再定義することはできません。 この記事に示している定義済みマクロの一部は複数の値を使用して定義されます。

ANSI 準拠の定義済みマクロ

マクロ

説明

__DATE__

現在のソース ファイルのコンパイル日付。 日付は Mmm dd yyyy 形式の文字列リテラルです。 月の名前 Mmm は、TIME.H で宣言された asctime ライブラリ関数によって生成される日付のものと同じです

__FILE__

現在のソース ファイルの名前。 __FILE__ は文字列リテラルに展開されます。 ファイルへの完全なパスが表示されるようにするには、/FC (診断時のソース コード ファイルの完全パス) を使用します。

__func__

これが含まれている関数の、非修飾かつ非装飾の名前を char 型の配列として返します。

void Foo(){
printf("%s\n", __func__);
} // prints “Foo”

__LINE__

現在のソース ファイルの行番号。 行番号は 10 進数の整数リテラルです。 これは #line ディレクティブを使用して変更できます。

__STDC__

ANSI/ISO C99 規格への準拠を示します。 /Za コンパイラ オプションが指定され、C++ コードをコンパイルしていない場合のみ、整数リテラルの定数 1 として定義されます。それ以外の場合は、定義されません。

__TIME__

現在のソース ファイルの最新のコンパイル時間。 時間は hh:mm:ss 形式の文字列リテラルです。

__TIMESTAMP__

現在のソース ファイルの最終更新日時は Ddd Mmm Date hh:mm:ss yyyy 形式の文字列リテラルとして表記します。ここで、Ddd は曜日の略称であり、Date は 1 〜 31 の整数です。

Microsoft 固有の定義済みマクロ

マクロ

説明

_ATL_VER

整数リテラルとしてエンコードされる ATL バージョンを定義します。

__AVX__

/arch:AVX または /arch:AVX2 を指定している場合に定義されます。

__AVX2__

/arch:AVX2 を指定している場合に定義されます。

_CHAR_UNSIGNED

既定の char 型が unsigned になります。 /J を指定している場合に定義されます。

__CLR_VER

アプリケーションのコンパイル時に使用された共通言語ランタイムのバージョンを定義します。 返される値は、次の形式のエンコードされた整数リテラルになります。

Mmmbbbbb

指定項目

  • M はランタイムのメジャー バージョンです。

  • mm はランタイムのマイナー バージョンです。

  • bbbbb はビルド番号です。

// clr_ver.cpp
// compile with: /clr
using namespace System;
int main() {
   Console::WriteLine(__CLR_VER);
}

__cplusplus_cli

/clr/clr:pure、または /clr:safe を指定してコンパイルする場合に定義されます。 __cplusplus_cli の値は整数リテラル 200406 です。 __cplusplus_cli は翻訳単位全体で有効になります。

// cplusplus_cli.cpp
// compile with: /clr
#include "stdio.h"
int main() {
   #ifdef __cplusplus_cli
      printf("%d\n", __cplusplus_cli);
   #else
      printf("not defined\n");
   #endif
}

__cplusplus_winrt

/ZW オプションを使用してコンパイルする場合に定義されます。 __cplusplus_winrt の値は整数リテラル 201009 です。

__COUNTER__

0 から始まる整数リテラルに展開されます。ソース ファイルで使用されるか、ソース ファイルのヘッダーに追加されるたびに 1 ずつ増えます。 __COUNTER__ はプリコンパイル済みヘッダーを使用するときのその状態を記憶します。

次の例では、__COUNTER__ を使用して、同じ型の 3 つの異なるオブジェクトに一意の識別子を割り当てます。

まず、次のクラス定義があるとします。 コンストラクターはパラメーターとして整数を受け取ります。

main で、アプリケーションは一意の識別子パラメーターとして exampleClass を使用して、__COUNTER__ 型の 3 つのオブジェクトを宣言します。

__cplusplus

C++ プログラムの場合にのみ定義されます。

_CPPRTTI

/GR (ランタイムの型情報の有効化) を指定してコンパイルしたコードの場合に定義されます。

_CPPUNWIND

/EH (例外処理モデル) フラグのいずれかを使用してコンパイルしたコードの場合に定義されます。

_DEBUG

/LDd/MDd/MTd を使用してコンパイルする場合に定義されます。

_DLL

/MD または /MDd (マルチスレッド DLL) を指定した場合に定義されます。

__FUNCDNAME__

関数でのみ有効です。 外側の関数の装飾名を文字列リテラルとして定義します。

__FUNCDNAME__/EP または /P コンパイラ オプションを使用する場合、は展開されません。

次の例では、__FUNCDNAME__、__FUNCSIG__、および __FUNCTION__ マクロを使用して、関数の情報を表示します。

__FUNCSIG__

関数でのみ有効です。 外側の関数のシグネチャを文字列リテラルとして定義します。

__FUNCSIG__/EP または /P コンパイラ オプションを使用する場合、は展開されません。

64 ビット オペレーティング システムでは、既定の呼び出し規約は __cdecl です。

例については、「__FUNCDNAME__」を参照してください。

__FUNCTION__

関数でのみ有効です。 外側の関数の非装飾名を文字列リテラルとして定義します。

__FUNCTION__/EP または /P コンパイラ オプションを使用する場合、は展開されません。

例については、「__FUNCDNAME__」を参照してください。

_INTEGRAL_MAX_BITS

整数型の最大サイズ (ビット単位) を整数リテラルとしてレポートします。

// integral_max_bits.cpp
#include <stdio.h>
int main() {
   printf("%d\n", _INTEGRAL_MAX_BITS);
}

_M_AMD64

x64 プロセッサがターゲットのコンパイルの場合に定義されます。

_M_ARM

ARM プロセッサがターゲットのコンパイルの場合に定義されます。

_M_CEE

/clr の任意の形式 (/clr:oldSyntax/clr:safe など) を使用するコンパイルの場合に定義されます。

_M_CEE_PURE

/clr:pure を使用するコンパイルの場合に定義されます。

_M_CEE_SAFE

/clr:safe を使用するコンパイルの場合に定義されます。

_M_IX86

x86 プロセッサがターゲットのコンパイルの場合に定義されます。 x64 プロセッサの場合には定義しません。

_M_ARM_FP

使用された /arch コンパイラ オプションを示す整数リテラル値に展開されます。

  • /arch オプションが指定されていない場合は 30 ~ 39。ARM の既定のアーキテクチャ (VFPv3) が使用されたことを示します。

  • /arch:VFPv4 が使用された場合は 40 ~ 49。

  • 詳細については、「/arch (x86)」を参照してください。

_M_IX86_FP

使用された /arch コンパイラ オプションを示す整数リテラル値に展開されます。

  • /arch:IA32 が使用された場合は 0。

  • /arch:SSE が使用された場合は 1。

  • /arch:SSE2/arch:AVX、または /arch:AVX2 が使用された場合は 2。 /arch を指定しなかった場合は、これが既定値になります。 /arch:AVX を指定している場合は、マクロ __AVX__ も定義されます。 /arch:AVX2 を指定すると、__AVX____AVX2__ も定義されます。

  • 詳細については、「/arch (x86)」を参照してください。

_M_X64

x64 プロセッサがターゲットのコンパイルの場合に定義されます。

_MANAGED

/clr を指定している場合に 1 として定義されます。

_MFC_VER

整数リテラルとしてエンコードされる MFC バージョンを定義します。

_MSC_BUILD

コンパイラのバージョン番号のリビジョン番号部分が含まれる整数リテラルに評価されます。 リビジョン番号はピリオド区切りのバージョン番号の 4 番目の部分です。 たとえば、Visual C++ コンパイラのバージョン番号が 15.00.20706.01 ある場合、_MSC_BUILD マクロは 1 に評価されます。

_MSC_EXTENSIONS

/Ze コンパイラ オプション (既定) を使用してコンパイルする場合に定義されます。 その値は定義されると 1 になります。

_MSC_FULL_VER

コンパイラのバージョン番号のメジャー番号、マイナー番号、ビルド番号の部分をエンコードする整数リテラルに評価されます。 メジャー番号はピリオド区切りのバージョン番号の最初の部分、マイナー番号は 2 番目の部分、ビルド番号は 3 番目の部分です。 たとえば、Visual C++ コンパイラのバージョン番号が 15.00.20706.01 ある場合、_MSC_FULL_VER マクロは 150020706 に評価されます。 コマンド ラインで「cl /?」と入力すると、コンパイラのバージョン番号が表示されます。

_MSC_VER

コンパイラのバージョン番号のメジャー番号とマイナー番号の部分をエンコードする整数リテラルに評価されます。 メジャー番号はピリオド区切りのバージョン番号の最初の部分、マイナー番号は 2 番目の部分です。

たとえば、Visual C++ コンパイラのバージョン番号が 17.00.51106.1 である場合、_MSC_VER マクロは 1700 に評価されます。 コマンド ラインで「cl /?」と入力すると、コンパイラのバージョン番号が表示されます。

__MSVC_RUNTIME_CHECKS

/RTC コンパイラ オプションのいずれかを指定している場合に定義されます。

_MT

/MD または /MDd (マルチスレッド DLL)、あるいは /MT または /MTd (マルチスレッド) を指定している場合に定義されます。

_NATIVE_WCHAR_T_DEFINED

/Zc:wchar_t を使用している場合に定義されます。

_OPENMP

/openmp を使用してコンパイルする場合に定義され、Visual C++ によって実装される OpenMP 仕様の日付を表す整数リテラルとして評価されます。

// _OPENMP_dir.cpp
// compile with: /openmp 
#include <stdio.h> 
int main() {
   printf("%d\n", _OPENMP);
}

_VC_NODEFAULTLIB

/Zl を使用している場合に定義されます。詳細については、「/Zl (既定のライブラリ名の省略)」を参照してください。

_WCHAR_T_DEFINED

/Zc:wchar_t を使用している場合、またはプロジェクトのシステム ヘッダー ファイルで wchar_t 型を定義している場合に定義されます。

_WIN32

Win32 および Win64 用のアプリケーションの場合に定義されます。 これは、常に定義されます。

_WIN64

Win64 用のアプリケーションの場合に定義されます。

参照

関連項目

マクロ (C/C++)

プリプロセッサ演算子

プリプロセッサ ディレクティブ