定義済みマクロPredefined macros

Microsoft C/C++コンパイラ (MSVC) は、言語 (C またはC++)、コンパイルターゲット、および選択されたコンパイラオプションに応じて、特定のプリプロセッサマクロを事前します。The Microsoft C/C++ compiler (MSVC) predefines certain preprocessor macros, depending on the language (C or C++), the compilation target, and the chosen compiler options.

MSVC は、ANSI/ISO C99 標準および ISO C++ 14 および C++ 17 標準で必要とされる定義済みのプリプロセッサマクロをサポートしています。MSVC supports the predefined preprocessor macros required by the ANSI/ISO C99 standard and the ISO C++14 and C++17 standards. 実装では、いくつかの Microsoft 固有のプリプロセッサマクロもサポートされています。The implementation also supports several more Microsoft-specific preprocessor macros. 一部のマクロは、特定のビルド環境またはコンパイラオプションに対してのみ定義されています。Some macros are defined only for specific build environments or compiler options. メモしている場合を除き、マクロは、 /dコンパイラオプションの引数として指定されているかのように、翻訳単位全体を通じて定義されます。Except where noted, the macros are defined throughout a translation unit as if they were specified as /D compiler option arguments. 定義されている場合、コンパイルの前にプリプロセッサによって、マクロが指定された値に拡張されます。When defined, the macros are expanded to the specified values by the preprocessor before compilation. 定義済みマクロは引数を取らず、再定義することはできません。The predefined macros take no arguments and can't be redefined.

標準の定義済み識別子Standard predefined identifier

コンパイラは、ISO C99 および ISO C++ 11 によって指定された定義済みの識別子をサポートしています。The compiler supports this predefined identifier specified by ISO C99 and ISO C++11.

  • __func__ 関数ローカルとして外側の関数の非修飾かつ非装飾名static constの配列charします。__func__ The unqualified and unadorned name of the enclosing function as a function-local static const array of char.

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

標準の定義済みマクロStandard predefined macros

コンパイラは、ISO C99 および ISO C++ 17 標準によって指定されたこれらの定義済みマクロをサポートしています。The compiler supports these predefined macros specified by the ISO C99 and ISO C++17 standards.

  • _cplusplus _ 翻訳単位をとC++してコンパイルするときに整数リテラル値として定義されます。__cplusplus Defined as an integer literal value when the translation unit is compiled as C++. それ以外の場合、定義されていません。Otherwise, undefined.

  • __DATE__ 現在のソース ファイルのコンパイル日付。__DATE__ The compilation date of the current source file. 日付は、 Mmm dd yyyyという形式の定数長の文字列リテラルです。The date is a constant length string literal of the form Mmm dd yyyy. 月の名前Mmmは、C ランタイムライブラリ (CRT) のasctime関数によって生成される月の省略名と同じです。The month name Mmm is the same as the abbreviated month name generated by the C Runtime Library (CRT) asctime function. 日付ddの最初の文字は、値が10未満の場合は空白になります。The first character of date dd is a space if the value is less than 10. このマクロは常に定義します。This macro is always defined.

  • __FILE__ 現在のソース ファイルの名前。__FILE__ The name of the current source file. __FILE__ 文字の文字列リテラルに展開します。__FILE__ expands to a character string literal. ファイルへの完全パスが表示されるようにするには、 /fc (診断でソースコードファイルの完全パス)を使用します。To ensure that the full path to the file is displayed, use /FC (Full Path of Source Code File in Diagnostics). このマクロは常に定義します。This macro is always defined.

  • __LINE__ 現在のソース ファイル内の整数の行番号として定義されています。__LINE__ Defined as the integer line number in the current source file. 値、 __LINE__ マクロを使用して変更することができます、#lineディレクティブ。The value of the __LINE__ macro can be changed by using a #line directive. このマクロは常に定義します。This macro is always defined.

  • __STDC__ C としてコンパイルされる場合、および 1 として定義されている、 /Zaコンパイラ オプションを指定します。__STDC__ Defined as 1 only when compiled as C and if the /Za compiler option is specified. それ以外の場合、定義されていません。Otherwise, undefined.

  • __STDC_HOSTED__ 実装がある場合は、1 として定義されている、実装がホストされている、必要な標準ライブラリ全体をサポートしています。__STDC_HOSTED__ Defined as 1 if the implementation is a hosted implementation, one that supports the entire required standard library. それ以外の場合は0として定義されます。Otherwise, defined as 0.

  • __STDCPP_THREADS__ プログラムは、実行の 1 つ以上のスレッドを持つことができる場合にのみ、1 として定義されており、C++ としてコンパイルします。__STDCPP_THREADS__ Defined as 1 if and only if a program can have more than one thread of execution, and compiled as C++. それ以外の場合、定義されていません。Otherwise, undefined.

  • __TIME__ 前処理された翻訳単位の変換のとき。__TIME__ The time of translation of the preprocessed translation unit. 時刻はhh: mm: ss形式の文字列リテラルで、CRT asctime関数によって返される時刻と同じです。The time is a character string literal of the form hh:mm:ss, the same as the time returned by the CRT asctime function. このマクロは常に定義します。This macro is always defined.

Microsoft 固有の定義済みマクロMicrosoft-specific predefined macros

MSVC では、これらの追加の定義済みマクロがサポートされます。MSVC supports these additional predefined macros.

  • __ATOM__ 1 として定義されている、 /favor:ATOMコンパイラ オプションを設定し、コンパイラのターゲットは x86 または x64 です。__ATOM__ Defined as 1 when the /favor:ATOM compiler option is set and the compiler target is x86 or x64. それ以外の場合、定義されていません。Otherwise, undefined.

  • _ AVX _ _ /Arch: AVX/arch: AVX2 、または/arch: AVX512コンパイラオプションが設定され、コンパイラターゲットが x86 または x64 の場合、1として定義されます。__AVX__ Defined as 1 when the /arch:AVX, /arch:AVX2 or /arch:AVX512 compiler options are set and the compiler target is x86 or x64. それ以外の場合、定義されていません。Otherwise, undefined.

  • _ AVX2 _ _ /Arch: AVX2または/arch: AVX512コンパイラオプションが設定され、コンパイラターゲットが x86 または x64 の場合、1として定義されます。__AVX2__ Defined as 1 when the /arch:AVX2 or /arch:AVX512 compiler option is set and the compiler target is x86 or x64. それ以外の場合、定義されていません。Otherwise, undefined.

  • _ AVX512BW _ _ /Arch: AVX512コンパイラオプションが設定され、コンパイラターゲットが x86 または x64 の場合、1として定義されます。__AVX512BW__ Defined as 1 when the /arch:AVX512 compiler option is set and the compiler target is x86 or x64. それ以外の場合、定義されていません。Otherwise, undefined.

  • _ AVX512CD _ _ /Arch: AVX512コンパイラオプションが設定され、コンパイラターゲットが x86 または x64 の場合、1として定義されます。__AVX512CD__ Defined as 1 when the /arch:AVX512 compiler option is set and the compiler target is x86 or x64. それ以外の場合、定義されていません。Otherwise, undefined.

  • _ AVX512DQ _ _ /Arch: AVX512コンパイラオプションが設定され、コンパイラターゲットが x86 または x64 の場合、1として定義されます。__AVX512DQ__ Defined as 1 when the /arch:AVX512 compiler option is set and the compiler target is x86 or x64. それ以外の場合、定義されていません。Otherwise, undefined.

  • _ AVX512F _ _ /Arch: AVX512コンパイラオプションが設定され、コンパイラターゲットが x86 または x64 の場合、1として定義されます。__AVX512F__ Defined as 1 when the /arch:AVX512 compiler option is set and the compiler target is x86 or x64. それ以外の場合、定義されていません。Otherwise, undefined.

  • _ AVX512VL _ _ /Arch: AVX512コンパイラオプションが設定され、コンパイラターゲットが x86 または x64 の場合、1として定義されます。__AVX512VL__ Defined as 1 when the /arch:AVX512 compiler option is set and the compiler target is x86 or x64. それ以外の場合、定義されていません。Otherwise, undefined.

  • _CHAR_UNSIGNED 既定の場合は 1 として定義されているchar型が符号なし。_CHAR_UNSIGNED Defined as 1 if the default char type is unsigned. この値が定義されているときに、 /J (既定の char 型の unsigned)コンパイラ オプションを設定します。This value is defined when the /J (Default char Type Is unsigned) compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • _CLR VER __ アプリのコンパイルに使用される共通言語ランタイム (CLR) のバージョンを表す整数リテラルとして定義されます。__CLR_VER Defined as an integer literal that represents the version of the Common Language Runtime (CLR) used to compile the app. 値はMmmbbbbb、とmm M いうbbbbb形式でエンコードされます。ここで、はランタイムのメジャーバージョン、はランタイムのマイナーバージョン、はビルド番号です。The value is encoded in the form Mmmbbbbb, where M is the major version of the runtime, mm is the minor version of the runtime, and bbbbb is the build number. __CLR_VERは、 /clrコンパイラオプションが設定されている場合に定義されます。__CLR_VER is defined if the /clr compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

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

  • __COUNTER_ _ 0 から始まる整数リテラルに展開します。__COUNTER__ Expands to an integer literal that starts at 0. たびに、ソース ファイルで使用が含まれているソース ファイルのヘッダーまたは 1 で、値が増加します。The value is incremented by 1 every time it's used in a source file, or in included headers of the source file. __COUNTER__ プリコンパイル済みヘッダーを使用すると、その状態を記憶します。__COUNTER__ remembers its state when you use precompiled headers. このマクロは常に定義します。This macro is always defined.

    この例で__COUNTER__は、を使用して、同じ型の3つの異なるオブジェクトに一意の識別子を割り当てます。This example uses __COUNTER__ to assign unique identifiers to three different objects of the same type. コンストラクター exampleClassは、パラメーターとして整数を受け取ります。The exampleClass constructor takes an integer as a parameter. mainは、アプリケーションは、一意の識別子exampleClassパラメーターと__COUNTER__してを使用して、型の3つのオブジェクトを宣言します。In main, the application declares three objects of type exampleClass, using __COUNTER__ as the unique identifier parameter:

    // 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;
    }
    
  • __と_ してコンパイルされ、 /clrコンパイラオプションが設定されてC++いる場合に、整数リテラル値200406として定義される cplusplus cli。__cplusplus_cli Defined as the integer literal value 200406 when compiled as C++ and a /clr compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined. 定義されている場合、 _ _cplusplus_cliは翻訳単位全体を通じて有効になります。When defined, __cplusplus_cli is in effect throughout the translation unit.

    // 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
    }
    
  • __と_ してC++コンパイルされ、 /ZW (Windows ランタイムコンパイル)コンパイラオプションが設定されている場合、整数リテラル値201009として定義される cplusplus winrt。__cplusplus_winrt Defined as the integer literal value 201009 when compiled as C++ and the /ZW (Windows Runtime Compilation) compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • _CPPRTTI 場合は 1 として定義されている、 /GR (ランタイム型情報の有効化)コンパイラ オプションを設定します。_CPPRTTI Defined as 1 if the /GR (Enable Run-Time Type Information) compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • _Cppunwind ワインド1つ以上の/gx (例外処理の有効化)/Clr (共通言語ランタイムのコンパイル)、または/EH (例外処理モデル)コンパイラオプションが設定されている場合は、1として定義されます。_CPPUNWIND Defined as 1 if one or more of the /GX (Enable Exception Handling), /clr (Common Language Runtime Compilation), or /EH (Exception Handling Model) compiler options are set. それ以外の場合、定義されていません。Otherwise, undefined.

  • _DEBUG 1 として定義されている、 /LDd/MDd、または/MTdコンパイラ オプションを設定します。_DEBUG Defined as 1 when the /LDd, /MDd, or /MTd compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • /MD または /MDd (マルチスレッド DLL) コンパイラオプションが設定されている場合、DLL は1として定義されます。 __DLL Defined as 1 when the /MD or /MDd (Multithreaded DLL) compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • __ファンク_dname外側の関数の装飾名を格納する文字列リテラルとして定義されます。__FUNCDNAME__ Defined as a string literal that contains the decorated name of the enclosing function. マクロは、関数内でのみ定義されます。The macro is defined only within a function. /Epまたは/pコンパイラオプションを使用する場合、ファンク _ _dname_ マクロは展開されません。The __FUNCDNAME__ macro isn't expanded if you use the /EP or /P compiler option.

    この例では__FUNCDNAME____FUNCSIG__、、 __FUNCTION__およびの各マクロを使用して、関数の情報を表示します。This example uses the __FUNCDNAME__, __FUNCSIG__, and __FUNCTION__ macros to display function information.

    // 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)
    }
    
  • __ファンク_sig外側の関数のシグネチャを格納する文字列リテラルとして定義されます。__FUNCSIG__ Defined as a string literal that contains the signature of the enclosing function. マクロは、関数内でのみ定義されます。The macro is defined only within a function. /Epまたは/pコンパイラオプションを使用する場合、ファンク _ _sig_ マクロは展開されません。The __FUNCSIG__ macro isn't expanded if you use the /EP or /P compiler option. 64ビットターゲット用にコンパイルされた場合、呼び出し規約__cdeclは既定でになります。When compiled for a 64-bit target, the calling convention is __cdecl by default. 使用状況の例は、次を参照してください、__FUNCDNAME__マクロ。For an example of usage, see the __FUNCDNAME__ macro.

  • __FUNCTION__ 、外側の関数の非装飾名を含む文字列リテラルとして定義されます。__FUNCTION__ Defined as a string literal that contains the undecorated name of the enclosing function. マクロは、関数内でのみ定義されます。The macro is defined only within a function. __FUNCTION__ を使用する場合、マクロが展開されていない、 /EPまたは/Pコンパイラ オプション。The __FUNCTION__ macro isn't expanded if you use the /EP or /P compiler option. 使用状況の例は、次を参照してください、__FUNCDNAME__マクロ。For an example of usage, see the __FUNCDNAME__ macro.

  • _INTEGRAL_MAX_BITS64 整数リテラル値として定義された、ベクター以外の整数型の最大サイズ (ビット) にします。_INTEGRAL_MAX_BITS Defined as the integer literal value 64, the maximum size (in bits) for a non-vector integral type. このマクロは常に定義します。This macro is always defined.

    // integral_max_bits.cpp
    #include <stdio.h>
    int main() {
        printf("%d\n", _INTEGRAL_MAX_BITS);
    }
    
  • _ INTELLISENSE _ _ IntelliSense コンパイラが Visual Studio IDE に渡すときに、1として定義されます。__INTELLISENSE__ Defined as 1 during an IntelliSense compiler pass in the Visual Studio IDE. それ以外の場合、定義されていません。Otherwise, undefined. このマクロを使用して、IntelliSense コンパイラで認識されないコードを保護したり、ビルドと IntelliSense のコンパイラを切り替えるために使用したりできます。You can use this macro to guard code the IntelliSense compiler doesn't understand, or use it to toggle between the build and IntelliSense compiler. 詳細については、「 IntelliSense のパフォーマンス低下のトラブルシューティングのヒント」を参照してください。For more information, see Troubleshooting Tips for IntelliSense Slowness.

  • _ISO_VOLATILE 場合は 1 として定義されている、 /volatile:isoコンパイラ オプションを設定します。_ISO_VOLATILE Defined as 1 if the /volatile:iso compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • _KERNEL_MODE 場合は 1 として定義されている、 /kernel (カーネル モード バイナリの作成)コンパイラ オプションを設定します。_KERNEL_MODE Defined as 1 if the /kernel (Create Kernel Mode Binary) compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • _M_AMD64 値のコンパイルの場合 100 x64 を対象とするプロセッサは、整数リテラルとして定義します。_M_AMD64 Defined as the integer literal value 100 for compilations that target x64 processors. それ以外の場合、定義されていません。Otherwise, undefined.

  • _M_ARM が ARM プロセッサをターゲットのコンパイルの整数リテラル値 7 として定義されています。 それ以外の場合、定義されていません。_M_ARM Defined as the integer literal value 7 for compilations that target ARM processors. それ以外の場合、定義されていません。Otherwise, undefined.

  • _ARMV7VE_は、arm プロセッサを対象とするコンパイルに /arch:ARMv7VE コンパイラオプションが設定されている場合に1と定義されてい_ ます。_M_ARM_ARMV7VE Defined as 1 when the /arch:ARMv7VE compiler option is set for compilations that target ARM processors. それ以外の場合、定義されていません。Otherwise, undefined.

  • _M_ARM_FP を指定する整数リテラル値として定義されている/archコンパイラ オプションは、ARM プロセッサを対象に設定されています。_M_ARM_FP Defined as an integer literal value that indicates which /arch compiler option was set for ARM processor targets. それ以外の場合、定義されていません。Otherwise, undefined.

    • Arm オプションが指定されてい/archない場合は30-39 の範囲の値。 arm の既定のアーキテクチャVFPv3() が設定されていることを示します。A value in the range 30-39 if no /arch ARM option was specified, indicating the default architecture for ARM was set (VFPv3).

    • が設定されている場合/arch:VFPv4は、40-49 の範囲の値。A value in the range 40-49 if /arch:VFPv4 was set.

    • 詳細については、/arch (ARM)を参照してください。For more information, see /arch (ARM).

  • _M_ARM64 が 64 ビット ARM プロセッサをターゲットのコンパイルの場合は 1 として定義されています。_M_ARM64 Defined as 1 for compilations that target 64-bit ARM processors. それ以外の場合、定義されていません。Otherwise, undefined.

  • _任意_/Clr (共通言語ランタイムのコンパイル)コンパイラオプションが設定されている場合、M CEE は001として定義されます。_M_CEE Defined as 001 if any /clr (Common Language Runtime Compilation) compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • _M_CEE_PURE 以降 Visual Studio 2015 で非推奨とされます。_M_CEE_PURE Deprecated beginning in Visual Studio 2015. 場合は 001 として定義されている、 /clr:pureコンパイラ オプションを設定します。Defined as 001 if the /clr:pure compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • _M_CEE_SAFE 以降 Visual Studio 2015 で非推奨とされます。_M_CEE_SAFE Deprecated beginning in Visual Studio 2015. 場合は 001 として定義されている、 /clr:safeコンパイラ オプションを設定します。Defined as 001 if the /clr:safe compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • _M_FP_EXCEPT 場合は 1 として定義されている、 /fp: 除くまたは/fp: 厳密なコンパイラ オプションを設定します。_M_FP_EXCEPT Defined as 1 if the /fp:except or /fp:strict compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • _M_FP_FAST 場合は 1 として定義されている、 /fp:fastコンパイラ オプションを設定します。_M_FP_FAST Defined as 1 if the /fp:fast compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • _M_FP_PRECISE 場合は 1 として定義されている、 /fp: 正確なコンパイラ オプションを設定します。_M_FP_PRECISE Defined as 1 if the /fp:precise compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • _M_FP_STRICT 場合は 1 として定義されている、 /fp: 厳密なコンパイラ オプションを設定します。_M_FP_STRICT Defined as 1 if the /fp:strict compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • _M_IX86 値 600 のコンパイルの場合そのターゲット x86 プロセッサは、整数リテラルとして定義します。_M_IX86 Defined as the integer literal value 600 for compilations that target x86 processors. このマクロは、x64、または ARM コンパイル ターゲット定義されていません。This macro isn't defined for x64 or ARM compilation targets.

  • _M_IX86_FP を示す整数リテラル値として定義されている、 /archセット、または既定値がコンパイラ オプション。_M_IX86_FP Defined as an integer literal value that indicates the /arch compiler option that was set, or the default. コンパイル ターゲットが x86 の場合このマクロが常に定義されているプロセッサ。This macro is always defined when the compilation target is an x86 processor. それ以外の場合、定義されていません。Otherwise, undefined. 定義されているときに、値には。When defined, the value is:

    • コンパイラオプションが/arch:IA32設定されている場合は0。0 if the /arch:IA32 compiler option was set.

    • コンパイラオプションが/arch:SSE設定されている場合は1。1 if the /arch:SSE compiler option was set.

    • /arch:SSE2/arch:AVX/arch:AVX2、または /arch:AVX512 コンパイラオプションが設定されている場合は2。2 if the /arch:SSE2, /arch:AVX, /arch:AVX2, or /arch:AVX512 compiler option was set. この値は、 /archコンパイラオプションが指定されていない場合の既定値です。This value is the default if an /arch compiler option wasn't specified. @No__t-0 が指定されている場合、マクロ _ _AVX_ も定義されます。When /arch:AVX is specified, the macro __AVX__ is also defined. @No__t-0 を指定すると、 _ _AVX__ _AVX2_ の両方も定義されます。When /arch:AVX2 is specified, both __AVX__ and __AVX2__ are also defined. @No__t-0 が指定さ _ __ れている場合、AVX、 _ __AVX2_ _AVX512BW__ _AVX512CD__AVX512DQ_、 _ AVX512F_および_AVX512VL も定義されています。 _ _ __When /arch:AVX512 is specified, __AVX__, __AVX2__, __AVX512BW__, __AVX512CD__, __AVX512DQ__, __AVX512F__ and __AVX512VL__ are also defined.

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

  • _M_X64 値のコンパイルの場合 100 x64 を対象とするプロセッサは、整数リテラルとして定義します。_M_X64 Defined as the integer literal value 100 for compilations that target x64 processors. それ以外の場合、定義されていません。Otherwise, undefined.

  • _MANAGED 1 として定義されている、 /clrコンパイラ オプションを設定します。_MANAGED Defined as 1 when the /clr compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • _MSC_BUILD コンパイラのバージョン番号のリビジョン番号要素を格納する整数リテラルとして定義されています。_MSC_BUILD Defined as an integer literal that contains the revision number element of the compiler's version number. リビジョン番号は、ピリオド区切りのバージョン番号の 4 番目の要素です。The revision number is the fourth element of the period-delimited version number. たとえば、Microsoft C と C++ コンパイラのバージョン番号が 15.00.20706.01 ある場合、 _MSC_BUILDマクロが 1 に評価されます。For example, if the version number of the Microsoft C/C++ compiler is 15.00.20706.01, the _MSC_BUILD macro evaluates to 1. このマクロは常に定義します。This macro is always defined.

  • _MSC_EXTENSIONS 既定でオンの場合は 1 として定義されている/Ze (言語拡張を有効にする)コンパイラ オプションを設定します。_MSC_EXTENSIONS Defined as 1 if the on-by-default /Ze (Enable Language Extensions) compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • _MSC_FULL_VER メジャーをエンコードする整数リテラルとして定義されている、マイナー、およびコンパイラのバージョン番号の数の要素を構築します。_MSC_FULL_VER Defined as an integer literal that encodes the major, minor, and build number elements of the compiler's version number. メジャー番号はピリオド区切りのバージョン番号の最初の要素、マイナー番号が 2 番目の要素、およびビルド番号が 3 番目の要素。The major number is the first element of the period-delimited version number, the minor number is the second element, and the build number is the third element. たとえば、Microsoft C と C++ コンパイラのバージョン番号が 15.00.20706.01 ある場合、 _MSC_FULL_VERマクロは 150020706 に評価されます。For example, if the version number of the Microsoft C/C++ compiler is 15.00.20706.01, the _MSC_FULL_VER macro evaluates to 150020706. 入力cl /?コンパイラのバージョン番号を表示するのには、コマンドラインでします。Enter cl /? at the command line to view the compiler's version number. このマクロは常に定義します。This macro is always defined.

  • _MSC_VER コンパイラのバージョン番号のメジャーおよびマイナー番号要素をエンコードする整数リテラルとして定義されています。_MSC_VER Defined as an integer literal that encodes the major and minor number elements of the compiler's version number. メジャー番号はピリオド区切りのバージョン番号の最初の要素と、マイナー番号は 2 番目の要素。The major number is the first element of the period-delimited version number and the minor number is the second element. たとえば、Microsoft C と C++ コンパイラのバージョン番号が 17.00.51106.1 である、 _MSC_VERマクロは 1700 に評価されます。For example, if the version number of the Microsoft C/C++ compiler is 17.00.51106.1, the _MSC_VER macro evaluates to 1700. 入力cl /?コンパイラのバージョン番号を表示するのには、コマンドラインでします。Enter cl /? at the command line to view the compiler's version number. このマクロは常に定義します。This macro is always defined.

    Visual Studio のバージョンVisual Studio version _MSC_VER_MSC_VER
    Visual Studio 6.0Visual Studio 6.0 12001200
    Visual Studio .NET 2002 (7.0)Visual Studio .NET 2002 (7.0) 13001300
    Visual Studio .NET 2003 (7.1)Visual Studio .NET 2003 (7.1) 13101310
    Visual Studio 2005 (8.0)Visual Studio 2005 (8.0) 14001400
    Visual Studio 2008 (9.0)Visual Studio 2008 (9.0) 15001500
    Visual Studio 2010 (10.0)Visual Studio 2010 (10.0) 16001600
    Visual Studio 2012 (11.0)Visual Studio 2012 (11.0) 17001700
    Visual Studio 2013 (12.0)Visual Studio 2013 (12.0) 18001800
    Visual Studio 2015 (14.0)Visual Studio 2015 (14.0) 19001900
    Visual Studio 2017 RTW (15.0)Visual Studio 2017 RTW (15.0) 19101910
    Visual Studio 2017 バージョン 15.3Visual Studio 2017 version 15.3 19111911
    Visual Studio 2017 バージョン 15.5Visual Studio 2017 version 15.5 19121912
    Visual Studio 2017 バージョン 15.6Visual Studio 2017 version 15.6 19131913
    Visual Studio 2017 バージョン 15.7Visual Studio 2017 version 15.7 19141914
    Visual Studio 2017 バージョン 15.8Visual Studio 2017 version 15.8 19151915
    Visual Studio 2017 バージョン15.9Visual Studio 2017 version 15.9 19161916
    Visual Studio 2019 RTW (16.0)Visual Studio 2019 RTW (16.0) 19201920
    Visual Studio 2019 バージョン 16.1Visual Studio 2019 version 16.1 19211921
    Visual Studio 2019 バージョン 16.2Visual Studio 2019 version 16.2 19221922
    Visual Studio 2019 バージョン16.3Visual Studio 2019 version 16.3 19231923

    特定のバージョンの Visual Studio またはその後に、コンパイラのリリースまたは更新プログラムをテストするには、 >= 演算子を使用します。To test for compiler releases or updates in a given version of Visual Studio or after, use the >= operator. これを条件付きディレクティブで使用して、 _MSC_VERをその既知のバージョンと比較することができます。You can use it in a conditional directive to compare _MSC_VER against that known version. 比較対象として相互に排他的な複数のバージョンがある場合は、バージョン番号の降順で比較します。If you have several mutually exclusive versions to compare, order your comparisons in descending order of version number. たとえば、このコードは Visual Studio 2017 以降でリリースされたコンパイラをチェックします。For example, this code checks for compilers released in Visual Studio 2017 and later. 次に、Visual Studio 2015 以降でリリースされたコンパイラがあるかどうかを確認します。Next, it checks for compilers released in or after Visual Studio 2015. 次に、Visual Studio 2015 より前にリリースされたすべてのコンパイラがあるかどうかを確認します。Then it checks for all compilers released before Visual Studio 2015:

    #if _MSC_VER >= 1910
    // . . .
    #elif _MSC_VER >= 1900
    // . . .
    #else
    // . . .
    #endif
    

    詳細については、Microsoft C++チームブログの「 Visual C++ Compiler Version 」を参照してください。For more information, see Visual C++ Compiler Version in the Microsoft C++ Team Blog.

  • _MSVC_LANG 対象となる、コンパイラは C++ 言語標準を指定する整数リテラルとして定義されています。_MSVC_LANG Defined as an integer literal that specifies the C++ language standard targeted by the compiler. C++ としてコンパイルされたコードでのみ設定されます。It's set only in code compiled as C++. マクロは、整数リテラル 201402 L を既定では、値とき、または、 /std:c + + + 14コンパイラ オプションを指定します。The macro is the integer literal value 201402L by default, or when the /std:c++14 compiler option is specified. 場合 201703 L にマクロが設定されて、 /std:c + + 17コンパイラ オプションを指定します。The macro is set to 201703L if the /std:c++17 compiler option is specified. 高い、指定されていない値に設定されているときに、 /std:c + + + 最新オプションを指定します。It's set to a higher, unspecified value when the /std:c++latest option is specified. それ以外の場合、マクロは定義されません。Otherwise, the macro is undefined. _MSVC_LANGマクロと/std (言語標準バージョンの指定)コンパイラ オプションで、Visual Studio 2015 Update 3 以降を使用できます。The _MSVC_LANG macro and /std (Specify Language Standard Version) compiler options are available beginning in Visual Studio 2015 Update 3.

  • __MSVC_RUNTIME_CHECKS 1 と 1 つとして定義されているの/RTCコンパイラ オプションを設定します。__MSVC_RUNTIME_CHECKS Defined as 1 when one of the /RTC compiler options is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • _プリ_ プロセッサ準拠モード/実験的: プリプロセッサコンパイラオプションが設定されている場合、MSVC は0として定義されます。_MSVC_TRADITIONAL Defined as 0 when the preprocessor conformance mode /experimental:preprocessor compiler option is set. 既定では1として定義されます。または、 /実験的: プリプロセッサコンパイラオプションが設定されている場合は、従来のプリプロセッサが使用されていることを示します。Defined as 1 by default, or when the /experimental:preprocessor- compiler option is set, to indicate the traditional preprocessor is in use. _MSVC_従来のマクロと/実験的: プリプロセッサ (プリプロセッサ準拠モードの有効化)コンパイラオプションは、Visual Studio 2017 バージョン15.8 以降で使用できます。The _MSVC_TRADITIONAL macro and /experimental:preprocessor (Enable preprocessor conformance mode) compiler option is available beginning in Visual Studio 2017 version 15.8.

    #if defined(_MSVC_TRADITIONAL) && _MSVC_TRADITIONAL
    // Logic using the traditional preprocessor
    #else
    // Logic using cross-platform compatible preprocessor
    #endif
    
  • _MT/Md または/mdd (マルチスレッド DLL) または/Mt または/MTd (マルチスレッド) が指定されている場合は、1として定義されます。_MT Defined as 1 when /MD or /MDd (Multithreaded DLL) or /MT or /MTd (Multithreaded) is specified. それ以外の場合、定義されていません。Otherwise, undefined.

  • _ネイティブ_WCHAR_T_定義 1 として定義されている、 /Zc:wchar_tコンパイラ オプションを設定します。_NATIVE_WCHAR_T_DEFINED Defined as 1 when the /Zc:wchar_t compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • _OPENMP 場合は、整数リテラルの 200203 として定義されている、 /openmp (OpenMP 2.0 サポートの有効化)コンパイラ オプションを設定します。_OPENMP Defined as integer literal 200203, if the /openmp (Enable OpenMP 2.0 Support) compiler option is set. この値は、MSVC によって実装される OpenMP 仕様の日付を表します。This value represents the date of the OpenMP specification implemented by MSVC. それ以外の場合、定義されていません。Otherwise, undefined.

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

  • __タイム_スタンプ現在のソースファイルが最後に変更された日時を含む文字列リテラルとして定義されます。これには、CRT asctime関数によって返される、省略形の定数長 (Fri 19 Aug 13:32:58 2016 など) が含まれます。__TIMESTAMP__ Defined as a string literal that contains the date and time of the last modification of the current source file, in the abbreviated, constant length form returned by the CRT asctime function, for example, Fri 19 Aug 13:32:58 2016. このマクロは常に定義します。This macro is always defined.

  • __ /Zl (既定のライブラリ名の省略)コンパイラオプションが設定されている場合、VC NODEFAULTLIB は1と定義されます。_VC_NODEFAULTLIB Defined as 1 when the /Zl (Omit Default Library Name) compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • _WCHAR_T_DEFINED 1 として定義されている既定の/Zc:wchar_tコンパイラ オプションを設定します。_WCHAR_T_DEFINED Defined as 1 when the default /Zc:wchar_t compiler option is set. _WCHAR_T_定義マクロが定義されていますが、値が存在しない場合、/Zc:wchar_t-コンパイラ オプションを設定すると、およびwchar_tに含まれるシステム ヘッダー ファイルで定義されているが、プロジェクトです。The _WCHAR_T_DEFINED macro is defined but has no value if the /Zc:wchar_t- compiler option is set, and wchar_t is defined in a system header file included in your project. それ以外の場合、定義されていません。Otherwise, undefined.

  • _WIN32コンパイルターゲットが32ビット ARM、64ビット ARM、x86、または x64 の場合、1として定義されます。_WIN32 Defined as 1 when the compilation target is 32-bit ARM, 64-bit ARM, x86, or x64. それ以外の場合、定義されていません。Otherwise, undefined.

  • _WIN64 コンパイル ターゲットが 64 ビット ARM または x64 の場合は、1 として定義します。_WIN64 Defined as 1 when the compilation target is 64-bit ARM or x64. それ以外の場合、定義されていません。Otherwise, undefined.

  • _WINRT_DLL 定義すると 1 としては、C++、およびその両方としてコンパイル/ZW (Windows ランタイムのコンパイル)/LD または/LDdコンパイラ オプションを設定します。_WINRT_DLL Defined as 1 when compiled as C++ and both /ZW (Windows Runtime Compilation) and /LD or /LDd compiler options are set. それ以外の場合、定義されていません。Otherwise, undefined.

ATL または MFC ライブラリのバージョンを識別するプリプロセッサマクロは、コンパイラによって事前に定義されていません。No preprocessor macros that identify the ATL or MFC library version are predefined by the compiler. ATL および MFC ライブラリヘッダーは、これらのバージョンマクロを内部で定義します。ATL and MFC library headers define these version macros internally. 必須のヘッダーが含まれる前に作成されたプリプロセッサディレクティブには定義されていません。They're undefined in preprocessor directives made before the required header is included.

  • _ATL_VER で定義されている<atldef.h > ATL バージョン番号をエンコードする整数リテラルとして。_ATL_VER Defined in <atldef.h> as an integer literal that encodes the ATL version number.

  • _MFC_VER で定義されている<afxver_.h > MFC のバージョン番号をエンコードする整数リテラルとして。_MFC_VER Defined in <afxver_.h> as an integer literal that encodes the MFC version number.

関連項目See also

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