Microsoft C/C++ コンパイラ (MSVC) は、言語 (C または C++)、コンパイル ターゲット、および選択したコンパイラ オプションに応じて、特定のプリプロセッサ マクロを事前に定義します。
MSVC では、ANSI/ISO C99、C11、C17 標準および ISO C++14、C++17、C++20 標準で必要とされる定義済みプリプロセッサ マクロがサポートされています。 実装では、さらにいくつかの Microsoft 固有のプリプロセッサ マクロもサポートされています。
一部のマクロは、特定のビルド環境またはコンパイラ オプションに対してのみ定義されます。 特に明記されていない限り、マクロは /D コンパイラ オプションの引数として指定されているかのように、翻訳単位全体で定義されます。 定義すると、プリプロセッサはコンパイル前に指定された値のマクロを展開します。 定義済みマクロは引数を取らず、再定義することはできません。
標準の定義済み識別子
コンパイラでは、ISO C99 および ISO C++11 によって指定されているこの定義済み識別子がサポートされています。
__func__関数ローカルの のchar配列としての、外側の関数の非修飾かつ非装飾の名前。void example() { printf("%s\n", __func__); } // prints "example"
標準の定義済みマクロ
コンパイラでは、ISO C99、C11、C17 および ISO C++17 標準によって指定されているこれらの定義済みマクロがサポートされています。
__cplusplus翻訳単位が C++ としてコンパイルされるときに、整数リテラル値として定義されます。 それ以外の場合は、定義されません。__DATE__現在のソース ファイルのコンパイル日付。 日付は Mmm dd yyyy 形式の固定長の文字列リテラルです。 月の名前 Mmm は、C ランタイム ライブラリ (CRT) asctime 関数によって生成される省略形の月名と同じものです。 日付 dd の最初の文字は、値が 10 未満の場合は空白になります。 このマクロは常に定義されます。__FILE__現在のソース ファイルの名前。__FILE__は文字の文字列リテラルに展開されます。 ファイルへの完全パスが表示されるようにするには、/FC(診断時のソース コード ファイルの完全パス) を使用します。 このマクロは常に定義されます。__LINE__現在のソース ファイルの整数の行番号として定義されます。 このマクロの値は、#lineディレクティブを使用して変更できます。__LINE__の値の整数型は、コンテキストによって異なる場合があります。 このマクロは常に定義されます。__STDC__C としてコンパイルされるときに/Zaコンパイラ オプションが指定されている場合にのみ、1 として定義されます。 Visual Studio 2022 バージョン 17.2 以降では、C としてコンパイルされるときに、および/Zc:__STDC__コンパイラ オプションが指定されている場合は 1 として定義されます。 それ以外の場合は、定義されません。__STDC_HOSTED__実装が必要な標準ライブラリ全体をサポートするホストされた実装である場合、1 として定義されます。 それ以外の場合は、0 として定義されます。__STDC_NO_ATOMICS__実装で任意の標準アトミックがサポートされない場合、1 として定義されます。 MSVC 実装では、C としてコンパイルされ、/stdの C11 か C17 オプションが指定されているとき、1 として定義されます。__STDC_NO_COMPLEX__実装で任意の標準複素数がサポートされない場合、1 として定義されます。 MSVC 実装では、C としてコンパイルされ、/stdの C11 か C17 オプションが指定されているとき、1 として定義されます。__STDC_NO_THREADS__実装で任意の標準スレッドがサポートされない場合、1 として定義されます。 MSVC 実装では、C としてコンパイルされ、/stdの C11 か C17 オプションが指定されているとき、1 として定義されます。__STDC_NO_VLA__実装で任意の標準可変長配列がサポートされない場合、1 として定義されます。 MSVC 実装では、C としてコンパイルされ、/stdの C11 か C17 オプションが指定されているとき、1 として定義されます。__STDC_VERSION__C としてコンパイルされ、/stdの C11 か C17 オプションが指定されているとき、定義されます。201112Lの場合は/std:c11に、201710Lの場合は/std:c17に展開されます。__STDCPP_DEFAULT_NEW_ALIGNMENT__/std:c17以降を指定すると、このマクロは、alignment-unawaresize_tの呼び出しによって保証されるアラインメントの値を持つoperator newリテラルに拡張されます。 より大きな配置は、operator new(std::size_t, std::align_val_t)などの配置に対応するオーバーロードに渡されます。 詳細については、「/Zc:alignedNew(C++17 のオーバーアライン割り当て)を参照してください。__STDCPP_THREADS__プログラムが複数の実行スレッドを持つことができ、C++ としてコンパイルされる場合にのみ、1 として定義されます。 それ以外の場合は、定義されません。__TIME__前処理された翻訳単位の翻訳時刻。 時刻は hh: mm: ss 形式の文字の文字列リテラルで、CRT asctime 関数から返される時刻と同じものです。 このマクロは常に定義されます。
Microsoft 固有の定義済みマクロ
MSVC では、その他の定義済みマクロがサポートされています。
__ARM_ARCHARM アーキテクチャ のバージョンを表す整数リテラルとして定義されます。 Armv8-A アーキテクチャでは、値は 8 として定義されます。 8.1 以降では、ARM C 言語拡張機能で定義されている数式 X * 100 + Y を使用して、X.Y などのマイナー バージョンの値がスケーリングされます。 たとえば、Armv8.1 の場合、__ARM_ARCHは 8 * 100 + 1 または 801 です。 ARM アーキテクチャのバージョンを設定するには、/arch (ARM64)を参照してください。 このマクロは、Visual Studio 2022 バージョン 17.10 で導入されました。__ATOM__/favor:ATOMコンパイラ オプションが設定され、コンパイラ ターゲットが x86 または x64 の場合、1 として定義されます。 それ以外の場合は、定義されません。__AVX__/arch:AVX、/arch:AVX2、/arch:AVX512、/arch:AVX10.1、または/arch:AVX10.2コンパイラ オプションが設定され、コンパイラ ターゲットが x86 または x64 の場合は 1 と定義されます。 それ以外の場合は、定義されません。__AVX2__/arch:AVX2、/arch:AVX512、/arch:AVX10.1、または/arch:AVX10.2コンパイラ オプションが設定され、コンパイラ ターゲットが x86 または x64 の場合、1 として定義されます。 それ以外の場合は、定義されません。__AVX512BW__/arch:AVX512、/arch:AVX10.1、または/arch:AVX10.2コンパイラ オプションが設定され、コンパイラ ターゲットが x86 または x64 の場合、1 として定義されます。 それ以外の場合は、定義されません。__AVX512CD__/arch:AVX512、/arch:AVX10.1、または/arch:AVX10.2コンパイラ オプションが設定され、コンパイラ ターゲットが x86 または x64 の場合、1 として定義されます。 それ以外の場合は、定義されません。__AVX512DQ__/arch:AVX512、/arch:AVX10.1、または/arch:AVX10.2コンパイラ オプションが設定され、コンパイラ ターゲットが x86 または x64 の場合、1 として定義されます。 それ以外の場合は、定義されません。__AVX512F__/arch:AVX512、/arch:AVX10.1、または/arch:AVX10.2コンパイラ オプションが設定され、コンパイラ ターゲットが x86 または x64 の場合、1 として定義されます。 それ以外の場合は、定義されません。__AVX512VL__/arch:AVX512、/arch:AVX10.1、または/arch:AVX10.2コンパイラ オプションが設定され、コンパイラ ターゲットが x86 または x64 の場合、1 として定義されます。 それ以外の場合は、定義されません。__AVX10_VER__/arch:AVX10.1または/arch:AVX10.2コンパイラ オプションが設定され、コンパイラ ターゲットが x86 または x64 の場合に AVX10 のバージョンを表す整数として定義されます。 それ以外の場合は、定義されません。_CHAR_UNSIGNED既定のchar型が unsigned の場合、1 として定義されます。 この値は、/J(既定の char 型が unsigned) コンパイラ オプションが設定されている場合に定義されます。 それ以外の場合は、定義されません。__CLR_VERアプリのコンパイルに使用される共通言語ランタイム (CLR) のバージョンを表す整数リテラルとして定義されます。 値は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/guard:cf(制御フロー ガードの有効化) コンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。__COUNTER__0 から始まる整数リテラルに展開されます。 値は、ソース ファイルまたはソース ファイルのインクルード ヘッダーで使用されるたびに 1 ずつインクリメントされます。__COUNTER__にはプリコンパイル済みヘッダーを使用するときのその状態が記憶されます。 このマクロは常に定義されます。この例では、
__COUNTER__を使用して、同じ型の 3 つの異なるオブジェクトに一意の識別子を割り当てます。exampleClassコンストラクターは、パラメーターとして整数を受け取ります。mainで、アプリケーションは一意の識別子パラメーターとしてexampleClassを使用して、__COUNTER__型の 3 つのオブジェクトを宣言します。// 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_cliC++ としてコンパイルされ、/clrコンパイラ オプションが設定されている場合、整数リテラル値 200406 として定義されます。 それ以外の場合は、定義されません。__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_winrtC++ としてコンパイルされ、/ZW(Windows ランタイムのコンパイル) コンパイラ オプションが設定されている場合、整数リテラル値 201009 として定義されます。 それ以外の場合は、定義されません。_CPPRTTI/GR(ランタイム型情報の有効化) コンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_CPPUNWIND/GX(例外処理の有効化)、/clr(共通言語ランタイムのコンパイル)、または/EH(例外処理モデル) コンパイラ オプションが 1 つ以上設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_DEBUG/LDd、/MDd、または/MTdコンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_DLL/MDまたは/MDd(マルチスレッド DLL) コンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。__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__IntelliSense コンパイラから Visual Studio IDE に渡されるときに、1 として定義されます。 それ以外の場合は、定義されません。 このマクロを使用して、IntelliSense コンパイラで認識されないコードを保護したり、ビルドと IntelliSense コンパイラを切り替えるために使用したりできます。 詳細については、「Troubleshooting Tips for IntelliSense Slowness」 (IntelliSense のパフォーマンス低下のトラブルシューティングのヒント) を参照してください。_ISO_VOLATILE/volatile:isoコンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_KERNEL_MODE/kernel(カーネル モード バイナリの作成) コンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_M_AMD64x64 プロセッサまたはARM64ECを対象とするコンパイルでは、整数リテラル値 100 として定義されます。 それ以外の場合は、定義されません。_M_ARMARM プロセッサをターゲットとするコンパイルの場合、整数リテラル値 7 として定義されます。 ARM64、ARM64EC、およびその他のターゲットでは未定義です。_M_ARM_ARMV7VEARM プロセッサをターゲットとするコンパイルに対して/arch:ARMv7VEコンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_M_ARM_FPARM プロセッサ ターゲットに対してどの/archコンパイラ オプションが設定されたかを示す整数リテラル値として定義されます。 それ以外の場合は、定義されません。/archARM オプションが指定されていない場合は 30 から 39 の範囲の値。ARM の既定のアーキテクチャ (VFPv3) が設定されていることを示します。/arch:VFPv4が設定されている場合は、40 から 49 の範囲の値。詳細については、
/arch(ARM) を参照してください。
_M_ARM64ARM64 を対象とするコンパイルでは 1 として定義されます。 それ以外の場合は、定義されません。_M_ARM64ECARM64ECを対象とするコンパイルでは 1 として定義されます。 それ以外の場合は、定義されません。_M_CEE/clr(共通言語ランタイムのコンパイル) コンパイラ オプションのいずれかが設定されている場合、001 として定義されます。 それ以外の場合は、定義されません。_M_CEE_PUREVisual Studio 2015 以降、非推奨となりました。/clr:pureコンパイラ オプションが設定されている場合、001 として定義されます。 それ以外の場合は、定義されません。_M_CEE_SAFEVisual Studio 2015 以降、非推奨となりました。/clr:safeコンパイラ オプションが設定されている場合、001 として定義されます。 それ以外の場合は、定義されません。_M_FP_CONTRACTVisual Studio 2022 から使用可能。/fp:contractまたは/fp:fastコンパイラ オプションが設定されている場合は、1 として定義されます。 それ以外の場合は、定義されません。_M_FP_EXCEPT/fp:exceptまたは/fp:strictコンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_M_FP_FAST/fp:fastコンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_M_FP_PRECISE/fp:preciseコンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_M_FP_STRICT/fp:strictコンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_M_IX86x86 プロセッサをターゲットとするコンパイルの場合、整数リテラル値 600 として定義されます。 このマクロは、x64 または ARM コンパイル ターゲットに対しては定義されません。_M_IX86_FP設定された/archコンパイラ オプション、または既定値を示す整数リテラル値として定義されます。 このマクロは、コンパイル ターゲットが x86 プロセッサの場合に常に定義されます。 それ以外の場合は、定義されません。 定義される場合、値は次のとおりです。/arch:IA32コンパイラ オプションが設定されている場合、0。/arch:SSEコンパイラ オプションが設定されている場合、1。/arch:SSE2、/arch:AVX、/arch:AVX2、/arch:AVX512、/arch:AVX10.1、または/arch:AVX10.2コンパイラ オプションが設定されている場合は 2。 この値は、/archコンパイラ オプションが指定されていない場合の既定値です。/arch:AVXが指定されている場合、マクロ__AVX__も定義されます。/arch:AVX2が指定されている場合、__AVX__と__AVX2__の両方も定義されます。/arch:AVX512が指定されている場合、__AVX__、__AVX2__、__AVX512BW__、__AVX512CD__、__AVX512DQ__、__AVX512F__、__AVX512VL__も定義されます。/arch:AVX10.1または/arch:AVX10.2を指定すると、__AVX__、__AVX2__、__AVX512BW__、__AVX512CD__、__AVX512DQ__、__AVX512F__、__AVX512VL__、および__AVX10_VER__も定義されます。詳細については、
/arch(x86) を参照してください。
_M_X64x64 プロセッサまたはARM64ECを対象とするコンパイルでは、整数リテラル値 100 として定義されます。 それ以外の場合は、定義されません。_MANAGED/clrコンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_MSC_BUILDコンパイラのバージョン番号のリビジョン番号要素を含む整数リテラルとして定義されます。 リビジョン番号は、ピリオドで区切られたバージョン番号の最後の要素です。 たとえば、Microsoft C/C++ コンパイラのバージョン番号が 15.00.20706.01 の場合、_MSC_BUILDマクロは 1 です。 このマクロは常に定義されます。_MSC_EXTENSIONS既定でオンの/Ze(言語拡張機能の有効化) コンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_MSC_FULL_VERコンパイラのバージョン番号のメジャー、マイナー、およびビルド番号要素をエンコードする整数リテラルとして定義されます。 メジャー番号はピリオド区切りのバージョン番号の最初の要素、マイナー番号は 2 番目の要素、ビルド番号は 3 番目の要素です。たとえば、Microsoft C/C++ コンパイラ バージョンが 19.39.33519 の場合、
_MSC_FULL_VERは193933519。 コマンド ラインで「cl /?」と入力すると、コンパイラのバージョン番号が表示されます。 このマクロは常に定義されます。 コンパイラのバージョン管理の詳細については、visual Studio 2019 16.8、16.9、16.10、16.10、16.11 の詳細についてはService リリース (Visual Studio 2017 以降) を参照してください。_MSC_VERコンパイラのバージョン番号のメジャーおよびマイナー番号要素をエンコードする整数リテラルとして定義されます。 メジャー番号はピリオド区切りのバージョン番号の最初の要素、マイナー番号は 2 番目の要素です。 たとえば、Microsoft C/C++ コンパイラのバージョン番号が 17.00.51106.1 の場合、_MSC_VERの値は 1700 です。 コマンド ラインで「cl /?」と入力すると、コンパイラのバージョン番号が表示されます。 このマクロは常に定義されます。特定のバージョンの Visual Studio 以降でコンパイラのリリースまたは更新をテストするには、
>=演算子を使用します。 条件付きディレクティブで使用して、その既知のバージョンに対して_MSC_VERを比較することができます。 比較対象として相互に排他的な複数のバージョンがある場合は、バージョン番号の降順で比較を行います。 たとえば、このコードでは Visual Studio 2017 以降でリリースされたコンパイラがチェックされます。 次に、Visual Studio 2015 以降でリリースされたコンパイラがチェックされます。 その後、Visual Studio 2015 より前にリリースされたすべてのコンパイラがチェックされます。#if _MSC_VER >= 1910 // . . . #elif _MSC_VER >= 1900 // . . . #else // . . . #endifVisual Studio 2019 16.8 および 16.9、および 16.10 と 16.11 の詳細については、同じメジャー バージョンとマイナー バージョンを共有する (
_MSC_VERの値も同じ) 場合は、「 Service リリース (Visual Studio 2017 以降) を参照してください。コンパイラのバージョン管理の履歴とコンパイラのバージョン番号、および対応する Visual Studio のバージョンの詳細については、「 C++ コンパイラのバージョン管理を参照してください。 また、Microsoft C++ チーム ブログの Visual C++ コンパイラ バージョン 。
_MSVC_LANGコンパイラのターゲットである C++ 言語標準を指定する整数リテラルとして定義されます。 C++ としてコンパイルされたコードのみが設定します。 マクロは、既定では、または201402Lコンパイラ オプションが指定されている場合は、整数リテラル値/std:c++14です。201703Lコンパイラ オプションが指定されている場合は、マクロは/std:c++17に設定されます。202002Lコンパイラ オプションが指定されている場合は、マクロは/std:c++20に設定されます。/std:c++latestオプションが指定されている場合は、より大きい、未指定の値に設定されます。 それ以外の場合は、マクロは定義されません。_MSVC_LANGマクロと/std(言語の標準バージョンの指定) コンパイラ オプションは、Visual Studio 2015 Update 3 以降で使用できます。__MSVC_RUNTIME_CHECKS/RTCコンパイラ オプションのいずれかが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_MSVC_TRADITIONAL:- Visual Studio 2017 バージョン 15.8 以降で使用可能: プリプロセッサ準拠モード
/experimental:preprocessorコンパイラ オプションが設定されている場合は 0 として定義されます。 既定では、または/experimental:preprocessor-コンパイラ オプションが設定されている場合は、1 として定義されます。これは、従来のプリプロセッサが使用されていることを示します。 - Visual Studio 2019 バージョン 16.5 以降で使用可能: プリプロセッサ準拠モード
/Zc:preprocessorコンパイラ オプションが設定されている場合は 0 として定義されます。 既定では、または/Zc:preprocessor-コンパイラ オプションが設定されている場合は、1 として定義されます。これは、従来のプリプロセッサが使用されていることを示します (基本的に、/Zc:preprocessorは非推奨の/experimental:preprocessorを置き換えます)。
#if !defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL // Logic using the traditional preprocessor #else // Logic using cross-platform compatible preprocessor #endif- Visual Studio 2017 バージョン 15.8 以降で使用可能: プリプロセッサ準拠モード
_MT/MD、/MDd(マルチスレッド DLL)、/MT、/MTd(マルチスレッド) のいずれかが指定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_NATIVE_WCHAR_T_DEFINED/Zc:wchar_tコンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_OPENMP/openmp(OpenMP 2.0 サポートの有効化) コンパイラ オプションが設定されている場合、整数リテラル 200203 として定義されます。 この値は、MSVC によって実装される OpenMP 仕様の日付を表します。 それ以外の場合は、定義されません。// _OPENMP_dir.cpp // compile with: /openmp #include <stdio.h> int main() { printf("%d\n", _OPENMP); }_PREFAST_/analyzeコンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。__SANITIZE_ADDRESS__Visual Studio 2019 バージョン 16.9 以降で使用可能:/fsanitize=addressコンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。__TIMESTAMP__現在のソース ファイルが最後に変更された日時を格納する文字列リテラルとして定義されます。CRTasctime関数から返される省略形の固定長の形式です (例:Fri 19 Aug 13:32:58 2016)。 このマクロは常に定義されます。_VC_NODEFAULTLIB/Zl(既定のライブラリ名の省略) コンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_WCHAR_T_DEFINED既定の/Zc:wchar_tコンパイラ オプションが設定されている場合、1 として定義されます。_WCHAR_T_DEFINEDマクロは定義されますが、/Zc:wchar_t-コンパイラ オプションが設定されていて、wchar_tがプロジェクトに含まれるシステム ヘッダー ファイルで定義されている場合は、値がありません。 それ以外の場合は、定義されません。_WIN32コンパイル ターゲットが 32 ビット ARM、64 ビット ARM、x86、x64、またはARM64ECの場合、1 として定義されます。 それ以外の場合は、定義されません。_WIN64コンパイル ターゲットが 64 ビット ARM、x64、またはARM64ECの場合は 1 として定義されます。 それ以外の場合は、定義されません。_WINRT_DLLC++ としてコンパイルされ、/ZW(Windows ランタイム コンパイル) および/LDまたは/LDdコンパイラ オプションの両方が設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。
ATL または MFC ライブラリのバージョンを識別するプリプロセッサ マクロは、コンパイラによって事前に定義されません。 ATL および MFC ライブラリ ヘッダーにより、これらのバージョン マクロは内部で定義されます。 必須のヘッダーが含まれる前に作成されたプリプロセッサ ディレクティブには定義されません。
_ATL_VERATL バージョン番号をエンコードする整数リテラルとして、<atldef.h>で定義されます。_MFC_VERMFC バージョン番号をエンコードする整数リテラルとして、<afxver_.h>で定義されます。