定義済みマクロ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.

  • 外側の関数の修飾されていないと非修飾の名前を、 charの関数ローカルの静的な定数配列として __func__ します。__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.

  • 翻訳単位をとC++してコンパイルするときに整数リテラル値として定義さ __cplusplus__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.

  • プログラムが1つ以上の実行スレッドを持つことができ、としてC++コンパイルできる場合にのみ、1として定義さ __STDCPP_THREADS__ ます。__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.

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

  • /arch: AVX/arch: AVX2 、または/arch: AVX512コンパイラオプションが設定され、コンパイラターゲットが x86 または x64 の場合、__AVX__ は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.

  • /arch: AVX2または/arch: AVX512コンパイラオプションが設定されており、コンパイラターゲットが x86 または x64 の場合、__AVX2__ は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.

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

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

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

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

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

  • 既定のchar型が符号なしの場合、_CHAR_UNSIGNED は1として定義されます。_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コンパイラオプションが設定されている場合、__CLR_VER が定義されます。__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);
    }
    
  • /ガード: cf (制御フローガードを有効にする)コンパイラオプションが設定されている場合、_CONTROL_FLOW_GUARD は1として定義されます。_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では、アプリケーションは __COUNTER__ を一意の識別子パラメーターとして使用して、exampleClass型の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++設定されている場合、__cplusplus_cli 整数リテラル値200406として定義されます。__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 ランタイムコンパイル)コンパイラオプションが設定されている場合、__cplusplus_winrt 整数リテラル値201009として定義されます。__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.

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

  • 1つ以上の/gx (例外処理の有効化)/Clr (共通言語ランタイムのコンパイル)、または/EH (例外処理モデル)コンパイラオプションが設定されている場合、_CPPUNWIND は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.

  • __FUNCDNAME__、外側の関数の装飾名を格納する文字列リテラルとして定義されます。__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コンパイラオプションを使用する場合、__FUNCDNAME__ マクロは展開されません。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)
    }
    
  • __FUNCSIG__、外側の関数のシグネチャを格納する文字列リテラルとして定義されます。__FUNCSIG__ Defined as a string literal that contains the signature of the enclosing function. マクロは、関数内でのみ定義されます。The macro is defined only within a function. /Epまたは/pコンパイラオプションを使用する場合、__FUNCSIG__ マクロは展開されません。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. /Epまたは/pコンパイラオプションを使用する場合、__FUNCTION__ マクロは展開されません。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_BITS 整数リテラル値64として定義されます。これは、非ベクター整数型の最大サイズ (ビット単位) です。_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 コンパイラの実行中に1として定義された __INTELLISENSE__ Visual Studio IDE に渡されます。__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.

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

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

  • _M_AMD64 x64 プロセッサを対象とするコンパイルの整数リテラル値100として定義されます。_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 プロセッサを対象とするコンパイルに対して設定されている場合、_M_ARM_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 ARM プロセッサターゲットに設定されている/archコンパイラオプションを示す整数リテラル値として定義されます。_M_ARM_FP Defined as an integer literal value that indicates which /arch compiler option was set for ARM processor targets. それ以外の場合、定義されていません。Otherwise, undefined.

    • /arch ARM オプションが指定されていない場合は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).

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

  • _M_CEE /clr (共通言語ランタイムのコンパイル)コンパイラオプションが設定されている場合は、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.

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

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

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

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

  • _M_IX86、x86 プロセッサを対象とするコンパイルの整数リテラル値600として定義されます。_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. /arch:AVX が指定されている場合、マクロ __AVX__ も定義されます。When /arch:AVX is specified, the macro __AVX__ is also defined. /arch:AVX2 が指定されている場合、__AVX____AVX2__ の両方も定義されます。When /arch:AVX2 is specified, both __AVX__ and __AVX2__ are also defined. /arch:AVX512 が指定されている場合、__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 x64 プロセッサを対象とするコンパイルの整数リテラル値100として定義されます。_M_X64 Defined as the integer literal value 100 for compilations that target x64 processors. それ以外の場合、定義されていません。Otherwise, undefined.

  • /clrコンパイラオプションが設定されている場合、_MANAGED は1として定義されます。_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.

  • 既定の/ze (Enable Language extension)コンパイラオプションが設定されている場合、_MSC_EXTENSIONS は1として定義されます。_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
    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++latestオプションを指定します。It's set to a higher, unspecified value when the /std:c++latest option is specified. それ以外の場合、マクロは定義されません。Otherwise, the macro is undefined. _MSVC_LANG マクロと、 (言語標準バージョンの指定)コンパイラオプションは、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.

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

  • プリプロセッサ準拠モード/実験的: プリプロセッサコンパイラオプションが設定されている場合、_MSVC_TRADITIONAL は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_TRADITIONAL マクロと/実験的: プリプロセッサ (プリプロセッサ準拠モードの有効化)コンパイラオプションは、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
    
  • /md または/mdd (マルチスレッド DLL) または/Mt または/MTd (マルチスレッド) が指定されている場合、_MT は1として定義されます。_MT Defined as 1 when /MD or /MDd (Multithreaded DLL) or /MT or /MTd (Multithreaded) is specified. それ以外の場合、定義されていません。Otherwise, undefined.

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

  • /openmp (openmp 2.0 のサポートを有効にする)コンパイラオプションが設定されている場合、_OPENMP は整数リテラル200203として定義されます。_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);
    }
    
  • /analyzeコンパイラオプションが設定されている場合、_PREFAST_ は1として定義されます。_PREFAST_ Defined as 1 when the /analyze compiler option is set. それ以外の場合、定義されていません。Otherwise, undefined.

  • __TIMESTAMP__ は、現在のソースファイルが最後に変更された日時を含む文字列リテラルとして定義されます。これには、Fri 19 Aug 13:32:58 2016のように、CRT asctime関数によって返される、省略形の定数長が含まれます。__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.

  • 既定の/zc: wchar_tコンパイラオプションが設定されている場合、_WCHAR_T_DEFINED は1として定義されます。_WCHAR_T_DEFINED Defined as 1 when the default /Zc:wchar_t compiler option is set. _WCHAR_T_DEFINED マクロは定義されていますが、/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.

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

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

  • としてC++コンパイルされ、 /ZW (Windows ランタイムコンパイル)/ld または/LDdコンパイラオプションの両方が設定されている場合、_WINRT_DLL は1として定義されます。_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.

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

  • <afxver_ > で定義されている _MFC_VER、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