定義済みマクロ
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 としてコンパイルされた場合、および/std:c11
または/std:c17
コンパイラ オプションが指定されている場合は 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 オプションが指定されているとき、定義されます。/std:c11
の場合は201112L
に、/std:c17
の場合は201710L
に展開されます。__STDCPP_DEFAULT_NEW_ALIGNMENT__
/std:c17
以降を指定すると、このマクロは、alignment-unawareoperator new
の呼び出しによって保証されるアラインメントの値を持つsize_t
リテラルに拡張されます。 より大きな配置は、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_ARCH
ARM アーキテクチャ のバージョンを表す整数リテラルとして定義されます。 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
のコンパイラ オプションが設定され、コンパイラ ターゲットが x86 または x64 の場合、1 として定義されます。 それ以外の場合は、定義されません。__AVX2__
/arch:AVX2
、/arch:AVX512
、または/arch:AVX10.1
コンパイラ オプションが設定され、コンパイラ ターゲットが x86 または x64 の場合、1 として定義されます。 それ以外の場合は、定義されません。__AVX512BW__
/arch:AVX512
または/arch:AVX10.1
コンパイラ オプションが設定され、コンパイラ ターゲットが x86 または x64 の場合、1 として定義されます。 それ以外の場合は、定義されません。__AVX512CD__
/arch:AVX512
または/arch:AVX10.1
コンパイラ オプションが設定され、コンパイラ ターゲットが x86 または x64 の場合、1 として定義されます。 それ以外の場合は、定義されません。__AVX512DQ__
/arch:AVX512
または/arch:AVX10.1
コンパイラ オプションが設定され、コンパイラ ターゲットが x86 または x64 の場合、1 として定義されます。 それ以外の場合は、定義されません。__AVX512F__
/arch:AVX512
または/arch:AVX10.1
コンパイラ オプションが設定され、コンパイラ ターゲットが x86 または x64 の場合、1 として定義されます。 それ以外の場合は、定義されません。__AVX512VL__
/arch:AVX512
または/arch:AVX10.1
コンパイラ オプションが設定され、コンパイラ ターゲットが x86 または x64 の場合、1 として定義されます。 それ以外の場合は、定義されません。__AVX10_VER__
/arch:AVX10.1
コンパイラ オプションが設定され、コンパイラ ターゲットが 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
で、アプリケーションは一意の識別子パラメーターとして__COUNTER__
を使用して、exampleClass
型の 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_cli
C++ としてコンパイルされ、/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_winrt
C++ としてコンパイルされ、/ZW
(Windows ランタイムのコンパイル) コンパイラ オプションが設定されている場合、整数リテラル値 201009 として定義されます。 それ以外の場合は、定義されません。_CPPRTTI
/GR
(ランタイム型情報の有効化) コンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_CPPUNWIND
/GX
(例外処理の有効化)、/clr
(共通言語ランタイムのコンパイル)、または/EH
(例外処理モデル) コンパイラ オプションが 1 つ以上設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_DEBUG
/LDd
、/MDd
、または/MTd
コンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_DLL
/MD
または/MDd
(マルチスレッド DLL) コンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。__FUNCDNAME__
外側の関数の装飾名を含む文字列リテラルとして定義されます。 このマクロは関数内でのみ定義されます。/EP
または/P
コンパイラ オプションを使用する場合、__FUNCDNAME__
マクロは展開されません。この例では、
__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__
外側の関数のシグネチャを含む文字列リテラルとして定義されます。 このマクロは関数内でのみ定義されます。/EP
または/P
コンパイラ オプションを使用する場合、__FUNCSIG__
マクロは展開されません。 64 ビット ターゲット用にコンパイルされた場合、既定の呼び出し規則は__cdecl
です。 使用例については、__FUNCDNAME__
マクロを参照してください。__FUNCTION__
外側の関数の非装飾名を含む文字列リテラルとして定義されます。 このマクロは関数内でのみ定義されます。/EP
または/P
コンパイラ オプションを使用する場合、__FUNCTION__
マクロは展開されません。 使用例については、__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_AMD64
x64 プロセッサまたはARM64ECを対象とするコンパイルでは、整数リテラル値 100 として定義されます。 それ以外の場合は、定義されません。_M_ARM
ARM プロセッサをターゲットとするコンパイルの場合、整数リテラル値 7 として定義されます。 ARM64、ARM64EC、およびその他のターゲットでは未定義です。_M_ARM_ARMV7VE
ARM プロセッサをターゲットとするコンパイルに対して/arch:ARMv7VE
コンパイラ オプションが設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。_M_ARM_FP
ARM プロセッサ ターゲットに対してどの/arch
コンパイラ オプションが設定されたかを示す整数リテラル値として定義されます。 それ以外の場合は、定義されません。/arch
ARM オプションが指定されていない場合は 30 から 39 の範囲の値。ARM の既定のアーキテクチャ (VFPv3
) が設定されていることを示します。/arch:VFPv4
が設定されている場合は、40 から 49 の範囲の値。詳細については、
/arch
(ARM) を参照してください。
_M_ARM64
ARM64 を対象とするコンパイルでは 1 として定義されます。 それ以外の場合は、定義されません。_M_ARM64EC
ARM64ECを対象とするコンパイルでは 1 として定義されます。 それ以外の場合は、定義されません。_M_CEE
/clr
(共通言語ランタイムのコンパイル) コンパイラ オプションのいずれかが設定されている場合、001 として定義されます。 それ以外の場合は、定義されません。_M_CEE_PURE
Visual Studio 2015 以降、非推奨となりました。/clr:pure
コンパイラ オプションが設定されている場合、001 として定義されます。 それ以外の場合は、定義されません。_M_CEE_SAFE
Visual Studio 2015 以降、非推奨となりました。/clr:safe
コンパイラ オプションが設定されている場合、001 として定義されます。 それ以外の場合は、定義されません。_M_FP_CONTRACT
Visual 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_IX86
x86 プロセッサをターゲットとするコンパイルの場合、整数リテラル値 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
コンパイラ オプションが設定されている場合は 2。 この値は、/arch
コンパイラ オプションが指定されていない場合の既定値です。/arch:AVX
が指定されている場合、マクロ__AVX__
も定義されます。/arch:AVX2
が指定されている場合、__AVX__
と__AVX2__
の両方も定義されます。/arch:AVX512
が指定されている場合、__AVX__
、__AVX2__
、__AVX512BW__
、__AVX512CD__
、__AVX512DQ__
、__AVX512F__
、__AVX512VL__
も定義されます。/arch:AVX10.1
を指定すると、__AVX__
、__AVX2__
、__AVX512BW__
、__AVX512CD__
、__AVX512DQ__
、__AVX512F__
、__AVX512VL__
、および__AVX10_VER__
も定義されます。詳細については、
/arch
(x86) を参照してください。
_M_X64
x64 プロセッサまたは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._MSC_FULL_VER
8、16.9、16.10、16.10、16.11 の詳細については、C++ コンパイラのバージョン管理および特に 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 // . . . #endif
Visual 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++ としてコンパイルされたコードのみが設定します。 マクロは、既定では、または/std:c++14
コンパイラ オプションが指定されている場合は、整数リテラル値201402L
です。/std:c++17
コンパイラ オプションが指定されている場合は、マクロは201703L
に設定されます。/std:c++20
コンパイラ オプションが指定されている場合は、マクロは202002L
に設定されます。/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 の場合、1 として定義されます。 それ以外の場合は、定義されません。_WIN64
コンパイル ターゲットが 64 ビットの ARM または x64 の場合、1 として定義されます。 それ以外の場合は、定義されません。_WINRT_DLL
C++ としてコンパイルされ、/ZW
(Windows ランタイム コンパイル) および/LD
または/LDd
コンパイラ オプションの両方が設定されている場合、1 として定義されます。 それ以外の場合は、定義されません。
ATL または MFC ライブラリのバージョンを識別するプリプロセッサ マクロは、コンパイラによって事前に定義されません。 ATL および MFC ライブラリ ヘッダーにより、これらのバージョン マクロは内部で定義されます。 必須のヘッダーが含まれる前に作成されたプリプロセッサ ディレクティブには定義されません。
_ATL_VER
ATL バージョン番号をエンコードする整数リテラルとして、<atldef.h>
で定義されます。_MFC_VER
MFC バージョン番号をエンコードする整数リテラルとして、<afxver_.h>
で定義されます。