定義済みマクロ

 

Visual Studio 2017 RC の最新のドキュメントの詳細については、Visual Studio 2017 RC ドキュメントをご参照ください。

Visual C コンパイラは言語 (C または C++)、対象をコンパイルおよび選択したコンパイラ オプションによって、特定のプリプロセッサ マクロが組み込まれています。

Visual C には、ANSI/ISO C99 標準および ISO の c++ 14 標準で指定された必須の定義済みプリプロセッサ マクロがサポートしています。 実装では、その他のいくつかの Microsoft 固有の仕様プリプロセッサ マクロもサポートします。 いくつかのマクロは、特定のビルド環境、またはコンパイラ オプションののみ定義されます。 として指定された場合と、翻訳単位全体でのマクロが定義されて、記載がなければ /D コンパイラ オプションの引数。 定義した場合、マクロは、コンパイル前にプリプロセッサによって指定された値に拡張されます。 定義済みマクロは引数を取らずし、再定義することはできません。

コンパイラは、ISO C99 および c++ 11 で指定されたこの事前定義の識別子をサポートします。

  • __func__ 関数 local として外側の関数の非修飾かつ名前 static``const の配列 charします。

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

コンパイラは、ISO C99 および ISO c++ 14 標準で指定されたこれらの定義済みマクロをサポートします。

  • _ _cplusplus 翻訳単位が C++ としてコンパイルするときに、整数リテラル値として定義します。 それ以外の場合、定義されていません。

  • __DATE__ 現在のソース ファイルのコンパイル日付。 日付が固定長の文字列形式のリテラル Mmm dd yyyyします。 月の名前 Mmm C ランタイム ライブラリによって生成される日付の月の省略名と同じは asctime 関数です。 日付の最初の文字 dd スペースは、値が 10 未満である場合。 このマクロは、常に定義されます。

  • __FILE__ 現在のソース ファイルの名前。 __FILE__ 文字の文字列リテラルに展開します。 ファイルへの完全パスが表示されることを確認するには使用 /FC (完全パスのソース コード ファイルで診断)します。 このマクロは、常に定義されます。

  • __LINE__ 現在のソース ファイル内の整数の行番号として定義します。 値、 __LINE__ マクロを使用して変更することができます、 #line ディレクティブです。 このマクロは、常に定義されます。

  • __STDC__ C としてコンパイルされた場合、および 1 として定義されている、 /Za コンパイラ オプションを指定します。 それ以外の場合、定義されていません。

  • __STDC_HOSTED__ 実装がある場合は、1 として定義されている、 実装がホストされている, 、必要な標準ライブラリ全体をサポートしています。 それ以外の場合、0 として定義されます。

  • __STDCPP_THREADS__ プログラムが、実行の 1 つ以上のスレッドを持つ場合に限り、1 として定義されており、C++ としてコンパイルします。 それ以外の場合、定義されていません。

  • __TIME__ 前処理された翻訳単位の変換のときです。 時間は、文字の文字列形式のリテラル hh:mm:ss, 、C ランタイム ライブラリによって返されるときと同じ asctime 関数です。 このマクロは、常に定義されます。

Microsoft Visual C には、これらの追加の定義済みマクロがサポートしています。

  • __ATOM__ 場合に 1 として定義されている、 /favor:ATOM コンパイラ オプションが設定され、コンパイラのターゲットは、x86 または x64。 それ以外の場合、定義されていません。

  • __AVX__ 場合に 1 として定義されている、 /arch:AVX または /arch:AVX2 コンパイラ オプションを設定し、コンパイラのターゲットは、x86 または x64。 それ以外の場合、定義されていません。

  • __AVX2__ 場合に 1 として定義されている、 /arch:AVX2 コンパイラ オプションが設定され、コンパイラのターゲットは、x86 または x64。 それ以外の場合、定義されていません。

  • _CHAR_UNSIGNED 既定の場合は、1 として定義されている char 型が符号なし。 これは、場合が設定、 /J (既定の char 型が符号なし) コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • _ _Clr_ver アプリケーションがコンパイルされたときに使用される共通言語ランタイムのバージョンを表す整数リテラルとして定義します。 フォームのエンコード値 Mmmbbbbb, ここで、 M 、ランタイムのメジャー バージョン mm 、ランタイムのマイナー バージョンと bbbbb ビルド番号です。 _ _Clr_ver が定義されている場合、 /clr コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

    // clr_ver.cpp  
    // compile with: /clr  
    using namespace System;  
    int main() {  
       Console::WriteLine(__CLR_VER);  
    }  
    
    
  • _CONTROL_FLOW_GUARD 場合に 1 として定義されている、 (有効にする制御フロー ガード)/guard:cf コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

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

    この例では __COUNTER__ を同じ型の 3 つの異なるオブジェクトに一意の識別子を割り当てます。 exampleClass コンス トラクターはパラメーターとして整数を受け取ります。 main, 、アプリケーションで型の 3 つのオブジェクトを宣言して exampleClass, を使用して、 __COUNTER__ 一意の識別子パラメーターとして。

    // macro__COUNTER__.cpp  
    // Demonstration of __COUNTER__, assigns unique identifiers to  
    // different objects of the same type.  
    // Compile by using: cl /EHsc /W4 macro__COUNTER__.cpp  
    #include <stdio.h>  
    
    class exampleClass {  
        int m_nID;  
    public:  
        // initialize object with a read-only unique ID  
        exampleClass(int nID) : m_nID(nID) {}  
        int GetID(void) { return m_nID; }  
    };  
    
    int main()  
    {  
        // __COUNTER__ is initially defined as 0  
        exampleClass e1(__COUNTER__);  
    
        // On the second reference, __COUNTER__ is now defined as 1  
        exampleClass e2(__COUNTER__);  
    
        // __COUNTER__ is now defined as 2  
        exampleClass e3(__COUNTER__);  
    
        printf("e1 ID: %i\n", e1.GetID());  
        printf("e2 ID: %i\n", e2.GetID());  
        printf("e3 ID: %i\n", e3.GetID());  
    
        // Output  
        // ------------------------------  
        // e1 ID: 0  
        // e2 ID: 1  
        // e3 ID: 2  
    
        return 0;  
    }  
    
    
  • _ _cplusplus_cli 200406 C++ としてコンパイルするときの整数リテラル値として定義され、 /clr, 、/clr: 純粋な, 、または /clr:safe コンパイラ オプションを設定します。 それ以外の場合、定義されていません。 定義した場合、 _ _cplusplus_cli が翻訳単位全体で有効になっています。

    // cplusplus_cli.cpp  
    // compile by using /clr  
    #include "stdio.h"  
    int main() {  
       #ifdef __cplusplus_cli  
          printf("%d\n", __cplusplus_cli);  
       #else  
          printf("not defined\n");  
       #endif  
    }  
    
    
  • _ _cplusplus_winrt 201009 C++ としてコンパイルするときの整数リテラル値として定義され、 /ZW (Windows ランタイムのコンパイル) コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • _CPPRTTI 場合は、1 として定義されている、 /GR (ランタイム型情報の有効化) コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • _CPPUNWIND 1 つ以上の場合は、1 として定義されている、 /GX (例外処理を有効にする), 、/clr (共通言語ランタイムのコンパイル), 、または /EH (例外処理モデル) コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • _DEBUG 場合に 1 として定義されている、 /LDd, 、/MDd, 、または /MTd コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • _DLL 場合に 1 として定義されている、 /MD または /MDd (マルチ スレッド DLL) コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • __FUNCDNAME__ を含む文字列リテラルとして定義されている、 装飾名 外側の関数です。 マクロは、関数内でのみ定義されます。 __FUNCDNAME__ を使用する場合、マクロが展開されていない、 /EP または /P コンパイラ オプション。

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

    // Demonstrates functionality of __FUNCTION__, __FUNCDNAME__, and __FUNCSIG__ macros
    void exampleFunction()
    {
    	printf("Function name: %s\n", __FUNCTION__);
    	printf("Decorated function name: %s\n", __FUNCDNAME__);
    	printf("Function signature: %s\n", __FUNCSIG__);
    	
    	// Sample Output
    	// -------------------------------------------------
    	// Function name: exampleFunction
    	// Decorated function name: ?exampleFunction@@YAXXZ
    	// Function signature: void __cdecl exampleFunction(void)
    }
    

  • __FUNCSIG__ 、外側の関数のシグネチャを格納する文字列リテラルとして定義します。 マクロは、関数内でのみ定義されます。 __FUNCSIG__ を使用する場合、マクロが展開されていない、 /EP または /P コンパイラ オプション。 呼び出し規約は、64 ビット ターゲット コンパイルされると、 __cdecl 既定です。 使用状況の例は、次を参照してください。、 __FUNCDNAME__ マクロです。

  • __FUNCTION__ 、外側の関数の非装飾名を含む文字列リテラルとして定義されます。 マクロは、関数内でのみ定義されます。 __FUNCTION__ を使用する場合、マクロが展開されていない、 /EP または /P コンパイラ オプション。 使用状況の例は、次を参照してください。、 __FUNCDNAME__ マクロです。

  • _INTEGRAL_MAX_BITS 64 整数リテラル値として定義された、ベクター以外の整数型の最大サイズ (ビット) にします。 このマクロは、常に定義されます。

    // integral_max_bits.cpp  
    #include <stdio.h>  
    int main() {  
       printf("%d\n", _INTEGRAL_MAX_BITS);  
    }  
    
    
  • __INTELLISENSE__ Visual Studio IDE の IntelliSense コンパイラ時に 1 を渡すように定義されています。 それ以外の場合、定義されていません。 このマクロを使用すると、IntelliSense コンパイラの詳細については、またはビルドと IntelliSense のコンパイラの切り替えを使用していないコードを保護します。 詳細については、次を参照してください。 IntelliSense パフォーマンスの低下のトラブルシューティングのヒントします。

  • _ISO_VOLATILE 場合は、1 として定義されている、 /volatile:iso コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • _KERNEL_MODE 場合は、1 として定義されている、 /kernel (カーネル モード バイナリの作成) コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • _M_AMD64 値 100 のコンパイルの場合その対象となる x64 プロセッサは、整数リテラルとして定義します。 それ以外の場合、定義されていません。

  • _M_ARM ARM プロセッサがターゲットのコンパイル数の整数リテラル値 7 として定義します。 それ以外の場合、定義されていません。

  • _M_ARM_ARMV7VE 場合に 1 として定義されている、 /arch:ARMv7VE ARM プロセッサがターゲット コンパイルに関するコンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • _M_ARM_FP を指定する整数リテラル値として定義されている /arch コンパイル ターゲットが ARM プロセッサである場合に、コンパイラ オプションが設定されています。 それ以外の場合、定義されていません。

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

    • 範囲の場合は 40 ~ 49 /arch:VFPv4 設定されました。

    • 参照してください /arch (ARM) の詳細。

  • _M_ARM64 が 64 ビット ARM プロセッサをターゲットのコンパイルの場合は 1 として定義します。 それ以外の場合、定義されていません。

  • _M_CEE いずれかの場合は 001 として定義された /clr (共通言語ランタイムのコンパイル) コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • _M_CEE_PURE 001 場合として定義されている、 /clr: 純粋な コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • _M_CEE_SAFE 001 場合として定義されている、 /clr:safe コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • _M_FP_EXCEPT 場合は、1 として定義されている、 /fp: を除く または /fp: 厳密な コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • _M_FP_FAST 場合は、1 として定義されている、 /fp:fast コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • _M_FP_PRECISE 場合は、1 として定義されている、 /fp: 正確な コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • _M_FP_STRICT 場合は、1 として定義されている、 /fp: 厳密な コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • _M_IX86 値 600 のコンパイルの場合その対象となる x86 プロセッサは、整数リテラルとして定義します。 このマクロは x64 または ARM コンパイル ターゲットに対して定義されていません。

  • _M_IX86_FP を示す整数リテラル値として定義されている、 /arch コンパイラ オプションが設定された、既定値です。 このマクロがコンパイル ターゲットが、x86 の場合に常に定義されているプロセッサ。 それ以外の場合、定義されていません。 定義した場合、値です。

    • 場合は 0、 /arch:IA32 コンパイラ オプションを設定します。

    • 場合は、1、 /arch:SSE コンパイラ オプションを設定します。

    • 場合は 2、 /arch:sse2 以上, 、/arch:AVX または /arch:AVX2 コンパイラ オプションを設定します。 この値には既定値がある場合、 /arch コンパイラ オプションが指定されなかった。 /Arch:AVX が指定されているマクロ __AVX__ も定義されています。 /Arch:AVX2 が指定されている両方 __AVX____AVX2__ も定義します。

    • 参照してください /arch (x86) の詳細。

  • _M_X64 値 100 のコンパイルの場合その対象となる x64 プロセッサは、整数リテラルとして定義します。 それ以外の場合、定義されていません。

  • _MANAGED 場合に 1 として定義されている、 /clr コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • _MSC_BUILD コンパイラのバージョン番号のリビジョン番号要素を格納する整数リテラルとして定義します。 リビジョン番号は、ピリオド区切りのバージョン番号の 4 番目の要素です。 たとえば、Visual C コンパイラのバージョン番号が 15.00.20706.01 ある、 _MSC_BUILD マクロは 1 に評価します。 このマクロは、常に定義されます。

  • _MSC_EXTENSIONS 場合は、1 として定義されている、 /Ze (言語拡張を有効にする) コンパイラ オプションを設定すると、既定であります。 それ以外の場合、定義されていません。

  • _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_LANG コンパイラの対象となる C++ 言語の基準を指定する整数リテラルとして定義します。 場合、マクロは整数リテラル値 201402 C++ としてコンパイルされるときに、 /std:c では 14 コンパイラ オプションは設定された場合、または、既定より大きく設定は指定されていない場合、値と、 /std:c では最新 コンパイラ オプションを設定します。 それ以外の場合、マクロは、定義されていません。 _MSVC_LANG マクロと /std (指定の言語標準バージョン) コンパイラ オプションで、Visual Studio 2015 の Update 3 以降を使用できます。

  • _ _Msvc_runtime_checks する場合は、1 つは 1 として定義されているは /RTC コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • _MT 場合に 1 として定義されている /MD または/MDd (マルチ スレッド DLL) または /MT または/MTd (マルチ スレッド) を指定します。 それ以外の場合、定義されていません。

  • _NATIVE_WCHAR_T_DEFINED 場合に 1 として定義されている、 /Zc:wchar_t コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • _OPENMP 場合に、Visual C によって実装される OpenMP 仕様の日付を表す整数リテラル 200203 として定義されている、 /openmp (OpenMP 2.0 サポートの有効化) コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

    // _OPENMP_dir.cpp  
    // compile with: /openmp   
    #include <stdio.h>   
    int main() {  
       printf("%d\n", _OPENMP);  
    }  
    
    
  • _PREFAST_ 場合に 1 として定義されている、 /analyze コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • __TIMESTAMP__ 、C ランタイム ライブラリによって返される省略形、定数値の形式では、現在のソース ファイルの最後に変更された日時を表す文字列リテラルとして定義されている asctime 機能、たとえば、 Fri 19 Aug 13:32:58 2016です。 このマクロは、常に定義されます。

  • _VC_NODEFAULTLIB 場合に 1 として定義されている、 /Zl (既定のライブラリ名の省略) コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

  • _WCHAR_T_DEFINED 場合に 1 として定義されている既定の /Zc:wchar_t コンパイラ オプションを設定します。 _WCHAR_T_DEFINED マクロが定義されているが、値が存在しない場合、 /Zc:wchar_t- コンパイラ オプションを設定すると wchar_t は、プロジェクトに含まれるシステム ヘッダー ファイルで定義されています。 それ以外の場合、定義されていません。

  • _WIN32 x 64 またはコンパイル ターゲットが 32 ビット ARM、64 ビット ARM、x86 の場合は 1 として定義します。 それ以外の場合、定義されていません。

  • _WIN64 コンパイル対象が 64 ビット ARM または x64 とする場合は、1 として定義します。 それ以外の場合、定義されていません。

  • _WINRT_DLL と C++ としてコンパイルされた場合に 1 として定義されている /ZW (Windows ランタイムのコンパイル)/LD または/LDd コンパイラ オプションを設定します。 それ以外の場合、定義されていません。

ATL または MFC ライブラリのバージョンを決定するために使用するプリプロセッサ マクロは、コンパイラによってあらかじめ定義されていません。 これらのマクロは、必須のヘッダーが含まれる前にプリプロセッサ ディレクティブで未定義いるため、ライブラリのヘッダーで定義されます。

  • _ATL_VER < atldef.h > で ATL バージョン番号をエンコードする整数リテラルとして定義します。

  • _MFC_VER < afxver_.h > で MFC のバージョン番号をエンコードする整数リテラルとして定義します。

マクロ (C/C++)
プリプロセッサ演算子
プリプロセッサ ディレクティブ

表示: