Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pengkompilasi Microsoft C/C++ (MSVC) telah menentukan makro praprosesor tertentu tergantung pada bahasa (C atau C++), target kompilasi, dan opsi kompilator yang dipilih.
MSVC mendukung makro praprosesor yang telah ditentukan sebelumnya yang diperlukan oleh standar ANSI/ISO C99, C11, dan C17, dan standar ISO C++14, C++17, dan C++20. Implementasi ini juga mendukung beberapa makro praprosesor khusus Microsoft.
Beberapa makro didefinisikan hanya untuk lingkungan build atau opsi kompilator tertentu. Kecuali jika dicatat, makro didefinisikan di seluruh unit terjemahan seolah-olah ditentukan sebagai /D argumen opsi pengkompilasi. Ketika ditentukan, prapemroses memperluas makro nilai yang ditentukan sebelum kompilasi. Makro yang telah ditentukan sebelumnya tidak mengambil argumen dan tidak dapat ditentukan ulang.
Pengidentifikasi standar yang telah ditentukan sebelumnya
Kompiler mendukung pengidentifikasi yang telah ditentukan sebelumnya ini yang ditentukan oleh ISO C99 dan ISO C++11.
__func__Nama fungsi enclosing yang tidak memenuhi syarat dan tidak terikat sebagai array const statis lokal fungsi darichar.void example() { printf("%s\n", __func__); } // prints "example"
Makro standar yang telah ditentukan sebelumnya
Pengkompilasi mendukung makro yang telah ditentukan sebelumnya ini yang ditentukan oleh standar ISO C99, C11, C17, dan ISO C++17.
__cplusplusDidefinisikan sebagai nilai literal bilangan bulat saat unit terjemahan dikompilasi sebagai C++. Jika tidak, tidak ditentukan.__DATE__Tanggal kompilasi file sumber saat ini. Tanggal adalah string panjang konstan harfiah dari formulir Mmm dd yyyy. Nama bulan Mmm sama dengan nama bulan yang disingkat yang dihasilkan oleh fungsi asktime C Runtime Library (CRT). Karakter pertama tanggal dd adalah spasi jika nilainya kurang dari 10. Makro ini selalu ditentukan.__FILE__Nama file sumber saat ini.__FILE__meluas ke string karakter secara harfiah. Untuk memastikan bahwa jalur lengkap ke file ditampilkan, gunakan/FC(Jalur Lengkap File Kode Sumber dalam Diagnostik). Makro ini selalu ditentukan.__LINE__Didefinisikan sebagai nomor baris bilangan bulat dalam file sumber saat ini. Nilai makro ini dapat diubah dengan menggunakan direktif#line. Jenis integral dari nilai__LINE__dapat bervariasi tergantung pada konteks. Makro ini selalu ditentukan.__STDC__Didefinisikan sebagai 1 saat dikompilasi sebagai C dan jika/Zaopsi pengkompilasi ditentukan. Mulai visual Studio 2022 versi 17.2, itu didefinisikan sebagai 1 saat dikompilasi sebagai C dan jika/Zc:__STDC__opsi kompilator ditentukan. Jika tidak, tidak ditentukan.__STDC_HOSTED__Didefinisikan sebagai 1 jika implementasi adalah implementasi yang dihosting, yang mendukung seluruh pustaka standar yang diperlukan. Jika tidak, didefinisikan sebagai 0.__STDC_NO_ATOMICS__Didefinisikan sebagai 1 jika implementasi tidak mendukung atom standar opsional. Implementasi MSVC mendefinisikannya sebagai 1 ketika dikompilasi sebagai C dan salah/stdsatu opsi C11 atau C17 ditentukan.__STDC_NO_COMPLEX__Didefinisikan sebagai 1 jika implementasi tidak mendukung angka kompleks standar opsional. Implementasi MSVC mendefinisikannya sebagai 1 ketika dikompilasi sebagai C dan salah/stdsatu opsi C11 atau C17 ditentukan.__STDC_NO_THREADS__Didefinisikan sebagai 1 jika implementasi tidak mendukung utas standar opsional. Implementasi MSVC mendefinisikannya sebagai 1 ketika dikompilasi sebagai C dan salah/stdsatu opsi C11 atau C17 ditentukan.__STDC_NO_VLA__Didefinisikan sebagai 1 jika implementasi tidak mendukung array panjang variabel standar. Implementasi MSVC mendefinisikannya sebagai 1 ketika dikompilasi sebagai C dan salah/stdsatu opsi C11 atau C17 ditentukan.__STDC_VERSION__Didefinisikan saat dikompilasi sebagai C dan salah/stdsatu opsi C11 atau C17 ditentukan. Ini meluas ke201112Luntuk/std:c11, dan201710Luntuk/std:c17.__STDCPP_DEFAULT_NEW_ALIGNMENT__Ketika/std:c17atau lebih baru ditentukan, makro ini meluas kesize_tliteral yang memiliki nilai perataan yang dijamin oleh panggilan untuk menyelaraskan-tidak menyadarioperator new. Perataan yang lebih besar diteruskan ke kelebihan beban sadar perataan, sepertioperator new(std::size_t, std::align_val_t). Untuk informasi selengkapnya, lihat/Zc:alignedNew(Alokasi C++17 yang terlalu selaras).__STDCPP_THREADS__Didefinisikan sebagai 1 jika dan hanya jika program dapat memiliki lebih dari satu utas eksekusi, dan dikompilasi sebagai C++. Jika tidak, tidak ditentukan.__TIME__Waktu penerjemahan unit terjemahan yang telah diproscesikan sebelumnya. Waktu adalah string karakter harfiah dari bentuk hh:mm:ss, sama dengan waktu yang dikembalikan oleh fungsi asktime CRT. Makro ini selalu ditentukan.
Makro khusus Microsoft yang telah ditentukan sebelumnya
MSVC mendukung makro lain yang telah ditentukan sebelumnya:
__ARM_ARCHDidefinisikan sebagai literal bilangan bulat yang mewakili versi arsitektur ARM. Nilai didefinisikan sebagai 8 untuk arsitektur Armv8-A. Untuk 8.1 dan seterusnya, nilai diskalakan untuk versi minor, seperti X.Y, dengan menggunakan rumus X * 100 + Y seperti yang didefinisikan oleh ekstensi bahasa ARM C. Misalnya, untuk Armv8.1,__ARM_ARCHadalah 8 * 100 + 1 atau 801. Untuk mengatur versi arsitektur ARM, lihat/arch (ARM64). Makro ini diperkenalkan di Visual Studio 2022 versi 17.10.__ATOM__Didefinisikan sebagai 1 ketika/favor:ATOMopsi pengkompilasi diatur dan target pengkompilasi adalah x86 atau x64. Jika tidak, tidak ditentukan.__AVX__Didefinisikan sebagai 1 ketika/arch:AVXopsi ,/arch:AVX2,/arch:AVX512,/arch:AVX10.1, atau/arch:AVX10.2pengkompilasi diatur dan target pengkompilasi adalah x86 atau x64. Jika tidak, tidak ditentukan.__AVX2__Didefinisikan sebagai 1 ketika/arch:AVX2opsi , ,/arch:AVX512/arch:AVX10.1, atau/arch:AVX10.2pengkompilasi diatur dan target pengkompilasi adalah x86 atau x64. Jika tidak, tidak ditentukan.__AVX512BW__Didefinisikan sebagai 1 ketika/arch:AVX512opsi ,/arch:AVX10.1, atau/arch:AVX10.2pengkompilasi diatur dan target pengkompilasi adalah x86 atau x64. Jika tidak, tidak ditentukan.__AVX512CD__Didefinisikan sebagai 1 ketika/arch:AVX512opsi ,/arch:AVX10.1, atau/arch:AVX10.2pengkompilasi diatur dan target pengkompilasi adalah x86 atau x64. Jika tidak, tidak ditentukan.__AVX512DQ__Didefinisikan sebagai 1 ketika/arch:AVX512opsi ,/arch:AVX10.1, atau/arch:AVX10.2pengkompilasi diatur dan target pengkompilasi adalah x86 atau x64. Jika tidak, tidak ditentukan.__AVX512F__Didefinisikan sebagai 1 ketika/arch:AVX512opsi ,/arch:AVX10.1, atau/arch:AVX10.2pengkompilasi diatur dan target pengkompilasi adalah x86 atau x64. Jika tidak, tidak ditentukan.__AVX512VL__Didefinisikan sebagai 1 ketika/arch:AVX512opsi ,/arch:AVX10.1, atau/arch:AVX10.2pengkompilasi diatur dan target pengkompilasi adalah x86 atau x64. Jika tidak, tidak ditentukan.__AVX10_VER__Didefinisikan sebagai bilangan bulat yang mewakili versi AVX10 ketika/arch:AVX10.1opsi atau/arch:AVX10.2pengkompilasi diatur dan target pengkompilasi adalah x86 atau x64. Jika tidak, tidak ditentukan._CHAR_UNSIGNEDDidefinisikan sebagai 1 jika jenis defaultchartidak ditandatangani. Nilai ini ditentukan ketika/Jopsi pengkompilasi (Jenis karakter default tidak ditandatangani) diatur. Jika tidak, tidak ditentukan.__CLR_VERDidefinisikan sebagai bilangan bulat literal yang mewakili versi Common Language Runtime (CLR) yang digunakan untuk mengkompilasi aplikasi. Nilai dikodekan dalam formulirMmmbbbbb, di manaMadalah versi utama runtime,mmadalah versi minor dari runtime, danbbbbbmerupakan nomor build.__CLR_VERdidefinisikan jika/clropsi pengkompilasi diatur. Jika tidak, tidak ditentukan.// clr_ver.cpp // compile with: /clr using namespace System; int main() { Console::WriteLine(__CLR_VER); }_CONTROL_FLOW_GUARDDidefinisikan sebagai 1 ketika/guard:cfopsi pengkompilasi (Aktifkan Control Flow Guard) diatur. Jika tidak, tidak ditentukan.__COUNTER__Memperluas ke literal bilangan bulat yang dimulai pada 0. Nilai bertambah 1 setiap kali digunakan dalam file sumber, atau dalam header yang disertakan dari file sumber.__COUNTER__mengingat statusnya ketika Anda menggunakan header yang telah dikompresi. Makro ini selalu ditentukan.Contoh ini digunakan
__COUNTER__untuk menetapkan pengidentifikasi unik ke tiga objek berbeda dengan jenis yang sama.exampleClassKonstruktor mengambil bilangan bulat sebagai parameter. Dalammain, aplikasi mendeklarasikan tiga objek jenisexampleClass, menggunakan__COUNTER__sebagai parameter pengidentifikasi unik:// 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_cliDidefinisikan sebagai nilai literal bilangan bulat 200406 saat dikompilasi sebagai C++ dan/clropsi pengkompilasi diatur. Jika tidak, tidak ditentukan. Ketika ditentukan,__cplusplus_cliberlaku di seluruh unit terjemahan.// 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_winrtDidefinisikan sebagai nilai literal bilangan bulat 201009 saat dikompilasi sebagai C++ dan/ZWopsi kompilator (Windows Runtime Compilation) diatur. Jika tidak, tidak ditentukan._CPPRTTIDidefinisikan sebagai 1 jika/GRopsi kompilator (Aktifkan Informasi Jenis Run-Time) diatur. Jika tidak, tidak ditentukan._CPPUNWINDDidefinisikan sebagai 1 jika satu atau beberapa/GXopsi kompilasi (Aktifkan Penanganan Pengecualian),/clr(Kompilasi Runtime Bahasa Umum), atau/EH(Model Penanganan Pengecualian) diatur. Jika tidak, tidak ditentukan._DEBUGDidefinisikan sebagai 1 ketika/LDdopsi , ,/MDdatau/MTdkompilator diatur. Jika tidak, tidak ditentukan._DLLDidefinisikan sebagai 1 ketika/MDopsi pengkompilasi atau/MDd(DLL Multithreaded) diatur. Jika tidak, tidak ditentukan.__FUNCDNAME__Didefinisikan sebagai string literal yang berisi nama yang didekorasi dari fungsi penutup. Makro didefinisikan hanya dalam fungsi.__FUNCDNAME__Makro tidak diperluas jika Anda menggunakan/EPopsi atau/Ppengkompilasi.Contoh ini menggunakan
__FUNCDNAME__makro ,__FUNCSIG__, dan__FUNCTION__untuk menampilkan informasi fungsi.// 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__Didefinisikan sebagai string literal yang berisi tanda tangan fungsi penutup. Makro didefinisikan hanya dalam fungsi.__FUNCSIG__Makro tidak diperluas jika Anda menggunakan/EPopsi atau/Ppengkompilasi. Saat dikompilasi untuk target 64-bit, konvensi panggilan secara__cdecldefault. Untuk contoh penggunaan, lihat__FUNCDNAME__makro.__FUNCTION__Didefinisikan sebagai string literal yang berisi nama yang tidak terdekorasi dari fungsi penutup. Makro didefinisikan hanya dalam fungsi.__FUNCTION__Makro tidak diperluas jika Anda menggunakan/EPopsi atau/Ppengkompilasi. Untuk contoh penggunaan, lihat__FUNCDNAME__makro._INTEGRAL_MAX_BITSDidefinisikan sebagai nilai literal bilangan bulat 64, ukuran maksimum (dalam bit) untuk jenis integral nonvektor. Makro ini selalu ditentukan.// integral_max_bits.cpp #include <stdio.h> int main() { printf("%d\n", _INTEGRAL_MAX_BITS); }__INTELLISENSE__Didefinisikan sebagai 1 selama pass kompilator IntelliSense di Visual Studio IDE. Jika tidak, tidak ditentukan. Anda dapat menggunakan makro ini untuk menjaga kode yang tidak dipahami pengkompilasi IntelliSense, atau menggunakannya untuk beralih antara kompiler build dan IntelliSense. Untuk informasi selengkapnya, lihat Tips Pemecahan Masalah untuk IntelliSense Slowness._ISO_VOLATILEDidefinisikan sebagai 1 jika/volatile:isoopsi pengkompilasi diatur. Jika tidak, tidak ditentukan._KERNEL_MODEDidefinisikan sebagai 1 jika/kernelopsi pengkompilasi (Buat Biner Mode Kernel) diatur. Jika tidak, tidak ditentukan._M_AMD64Didefinisikan sebagai nilai literal bilangan bulat 100 untuk kompilasi yang menargetkan prosesor x64 atau ARM64EC. Jika tidak, tidak ditentukan._M_ARMDidefinisikan sebagai nilai harfiah bilangan bulat 7 untuk kompilasi yang menargetkan prosesor ARM. Tidak ditentukan untuk ARM64, ARM64EC, dan target lainnya._M_ARM_ARMV7VEDidefinisikan sebagai 1 ketika/arch:ARMv7VEopsi kompilator diatur untuk kompilasi yang menargetkan prosesor ARM. Jika tidak, tidak ditentukan._M_ARM_FPDidefinisikan sebagai nilai literal bilangan bulat yang menunjukkan opsi pengkompilasi mana yang/archditetapkan untuk target prosesor ARM. Jika tidak, tidak ditentukan.Nilai dalam rentang 30-39 jika tidak ada
/archopsi ARM yang ditentukan, menunjukkan arsitektur default untuk ARM diatur (VFPv3).Nilai dalam rentang 40-49 jika
/arch:VFPv4ditetapkan.Untuk informasi selengkapnya, lihat
/arch(ARM).
_M_ARM64Didefinisikan sebagai 1 untuk kompilasi yang menargetkan ARM64. Jika tidak, tidak ditentukan._M_ARM64ECDidefinisikan sebagai 1 untuk kompilasi yang menargetkan ARM64EC. Jika tidak, tidak ditentukan._M_CEEDidefinisikan sebagai 001 jika ada/clropsi pengkompilasi (Kompilasi Runtime Bahasa Umum) diatur. Jika tidak, tidak ditentukan._M_CEE_PURETidak digunakan lagi dimulai di Visual Studio 2015. Didefinisikan sebagai 001 jika/clr:pureopsi pengkompilasi diatur. Jika tidak, tidak ditentukan._M_CEE_SAFETidak digunakan lagi dimulai di Visual Studio 2015. Didefinisikan sebagai 001 jika/clr:safeopsi pengkompilasi diatur. Jika tidak, tidak ditentukan._M_FP_CONTRACTTersedia dimulai di Visual Studio 2022. Didefinisikan sebagai 1 jika/fp:contractopsi atau/fp:fastpengkompilasi diatur. Jika tidak, tidak ditentukan._M_FP_EXCEPTDidefinisikan sebagai 1 jika/fp:exceptopsi atau/fp:strictpengkompilasi diatur. Jika tidak, tidak ditentukan._M_FP_FASTDidefinisikan sebagai 1 jika/fp:fastopsi pengkompilasi diatur. Jika tidak, tidak ditentukan._M_FP_PRECISEDidefinisikan sebagai 1 jika/fp:preciseopsi pengkompilasi diatur. Jika tidak, tidak ditentukan._M_FP_STRICTDidefinisikan sebagai 1 jika/fp:strictopsi pengkompilasi diatur. Jika tidak, tidak ditentukan._M_IX86Didefinisikan sebagai nilai literal bilangan bulat 600 untuk kompilasi yang menargetkan prosesor x86. Makro ini tidak ditentukan untuk target kompilasi x64 atau ARM._M_IX86_FPDidefinisikan sebagai nilai literal bilangan bulat yang menunjukkan/archopsi pengkompilasi yang diatur, atau default. Makro ini selalu ditentukan ketika target kompilasi adalah prosesor x86. Jika tidak, tidak ditentukan. Ketika ditentukan, nilainya adalah:0 jika
/arch:IA32opsi pengkompilasi diatur.1 jika
/arch:SSEopsi pengkompilasi diatur.2 jika
/arch:SSE2opsi , ,/arch:AVX/arch:AVX2,/arch:AVX512,/arch:AVX10.1, atau/arch:AVX10.2compiler diatur. Nilai ini adalah default jika/archopsi pengkompilasi tidak ditentukan. Ketika/arch:AVXditentukan, makro__AVX__juga ditentukan. Ketika/arch:AVX2ditentukan, dan__AVX____AVX2__juga didefinisikan. Ketika/arch:AVX512ditentukan,__AVX__, ,__AVX2__,__AVX512BW__,__AVX512CD__,__AVX512DQ____AVX512F__, dan__AVX512VL__juga ditentukan. Ketika/arch:AVX10.1atau/arch:AVX10.2ditentukan,__AVX__, ,__AVX2__,__AVX512BW__,__AVX512CD____AVX512DQ__,__AVX512F__, ,__AVX512VL__dan__AVX10_VER__juga ditentukan.Untuk informasi selengkapnya, lihat
/arch(x86).
_M_X64Didefinisikan sebagai nilai literal bilangan bulat 100 untuk kompilasi yang menargetkan prosesor x64 atau ARM64EC. Jika tidak, tidak ditentukan._MANAGEDDidefinisikan sebagai 1 saat/clropsi pengkompilasi diatur. Jika tidak, tidak ditentukan._MSC_BUILDDidefinisikan sebagai bilangan bulat literal yang berisi elemen nomor revisi dari nomor versi pengkompilasi. Nomor revisi adalah elemen terakhir dari nomor versi yang dibatasi periode. Misalnya, jika nomor versi pengkompilasi Microsoft C/C++ adalah 15.00.20706.01,_MSC_BUILDmakro adalah 1. Makro ini selalu ditentukan._MSC_EXTENSIONSDidefinisikan sebagai 1 jika opsi kompilator on-by-default/Ze(Aktifkan Ekstensi Bahasa) diatur. Jika tidak, tidak ditentukan._MSC_FULL_VERDidefinisikan sebagai bilangan bulat literal yang mengodekan elemen angka utama, minor, dan build dari nomor versi kompilator. Angka utama adalah elemen pertama dari nomor versi yang dibatasi periode, angka minor adalah elemen kedua, dan nomor build adalah elemen ketiga.Misalnya, jika versi kompilator Microsoft C/C++ adalah 19.39.33519,
_MSC_FULL_VER193933519. Masukkancl /?di baris perintah untuk melihat nomor versi pengkompilasi. Makro ini selalu ditentukan. Untuk informasi selengkapnya tentang penerapan versi kompilator, lihat Penerapan versi kompilator C++ dan khususnya Rilis layanan yang dimulai dengan Visual Studio 2017 untuk informasi selengkapnya tentang Visual Studio 2019 16.8, 16.9, 16.10 dan 16.11, yang mengharuskan_MSC_FULL_VERuntuk membedakannya._MSC_VERDidefinisikan sebagai bilangan bulat literal yang mengodekan elemen angka utama dan minor dari nomor versi kompilator. Angka utama adalah elemen pertama dari nomor versi yang dibatasi periode dan angka minor adalah elemen kedua. Misalnya, jika nomor versi pengkompilasi Microsoft C/C++ adalah 17.00.51106.1, nilainya_MSC_VERadalah 1700. Masukkancl /?di baris perintah untuk melihat nomor versi pengkompilasi. Makro ini selalu ditentukan.Untuk menguji rilis kompilator atau pembaruan dalam versi Visual Studio tertentu atau yang lebih baru, gunakan
>=operator . Anda dapat menggunakannya dalam arahan kondisional untuk dibandingkan dengan_MSC_VERversi yang diketahui. Jika Anda memiliki beberapa versi yang saling eksklusif untuk dibandingkan, pesan perbandingan Anda dalam urutan menurun nomor versi. Misalnya, kode ini memeriksa kompilator yang dirilis di Visual Studio 2017 dan yang lebih baru. Selanjutnya, ini memeriksa kompilator yang dirilis di atau setelah Visual Studio 2015. Kemudian memeriksa semua kompilator yang dirilis sebelum Visual Studio 2015:#if _MSC_VER >= 1910 // . . . #elif _MSC_VER >= 1900 // . . . #else // . . . #endifUntuk informasi selengkapnya tentang Visual Studio 2019 16.8 dan 16.9, dan 16.10 dan 16.11, yang memiliki versi utama dan minor yang sama (sehingga memiliki nilai yang sama untuk
_MSC_VER), lihat Rilis layanan yang dimulai dengan Visual Studio 2017.Untuk informasi selengkapnya tentang riwayat penerapan versi kompilator, dan nomor versi pengkompilasi dan versi Visual Studio yang sesuai dengannya, lihat penerapan versi kompilator C++. Selain itu, Visual C++ Compiler Version di blog tim Microsoft C++.
_MSVC_LANGDidefinisikan sebagai literal bilangan bulat yang menentukan standar bahasa C++ yang ditargetkan oleh pengkompilasi. Hanya kode yang dikompilasi sebagai C++ yang mengaturnya. Makro adalah nilai201402Lliteral bilangan bulat secara default, atau ketika/std:c++14opsi pengkompilasi ditentukan. Makro diatur ke201703Ljika/std:c++17opsi pengkompilasi ditentukan. Makro diatur ke202002Ljika/std:c++20opsi pengkompilasi ditentukan. Ini diatur ke nilai yang lebih tinggi dan tidak ditentukan saat/std:c++latestopsi ditentukan. Jika tidak, makro tidak ditentukan. Opsi_MSVC_LANGpengkompilasi makro dan/std(Tentukan versi standar bahasa) tersedia dimulai di Visual Studio 2015 Update 3.__MSVC_RUNTIME_CHECKSDidefinisikan sebagai 1 ketika salah/RTCsatu opsi pengkompilasi diatur. Jika tidak, tidak ditentukan._MSVC_TRADITIONAL:- Tersedia dimulai dengan Visual Studio 2017 versi 15.8: Didefinisikan sebagai 0 saat opsi kompilator mode
/experimental:preprocessorkesuaian praproscesor diatur. Didefinisikan sebagai 1 secara default, atau ketika/experimental:preprocessor-opsi pengkompilasi diatur, untuk menunjukkan prapemrosana tradisional sedang digunakan. - Tersedia dimulai dengan Visual Studio 2019 versi 16.5: Didefinisikan sebagai 0 saat opsi kompilator mode
/Zc:preprocessorkesuaian praproscesor diatur. Didefinisikan sebagai 1 secara default, atau ketika/Zc:preprocessor-opsi pengkompilasi diatur, untuk menunjukkan prapemrosem tradisional sedang digunakan (pada dasarnya,/Zc:preprocessormenggantikan yang tidak digunakan/experimental:preprocessorlagi ).
#if !defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL // Logic using the traditional preprocessor #else // Logic using cross-platform compatible preprocessor #endif- Tersedia dimulai dengan Visual Studio 2017 versi 15.8: Didefinisikan sebagai 0 saat opsi kompilator mode
_MTDidefinisikan sebagai 1 ketika/MDatau/MDd(DLL Multithreaded) atau/MT/MTd(Multithreaded) ditentukan. Jika tidak, tidak ditentukan._NATIVE_WCHAR_T_DEFINEDDidefinisikan sebagai 1 saat/Zc:wchar_topsi pengkompilasi diatur. Jika tidak, tidak ditentukan._OPENMPDidefinisikan sebagai 200203 literal bilangan bulat, jika/openmpopsi pengkompilasi (Aktifkan Dukungan OpenMP 2.0) diatur. Nilai ini menunjukkan tanggal spesifikasi OpenMP yang diterapkan oleh MSVC. Jika tidak, tidak ditentukan.// _OPENMP_dir.cpp // compile with: /openmp #include <stdio.h> int main() { printf("%d\n", _OPENMP); }_PREFAST_Didefinisikan sebagai 1 saat/analyzeopsi pengkompilasi diatur. Jika tidak, tidak ditentukan.__SANITIZE_ADDRESS__Tersedia dimulai dengan Visual Studio 2019 versi 16.9. Didefinisikan sebagai 1 saat/fsanitize=addressopsi pengkompilasi diatur. Jika tidak, tidak ditentukan.__TIMESTAMP__Didefinisikan sebagai string literal yang berisi tanggal dan waktu modifikasi terakhir file sumber saat ini, dalam bentuk panjang konstanta singkatan yang dikembalikan oleh fungsi CRTasctime, misalnya,Fri 19 Aug 13:32:58 2016. Makro ini selalu ditentukan._VC_NODEFAULTLIBDidefinisikan sebagai 1 ketika/Zlopsi pengkompilasi (Hilangkan Nama Pustaka Default) diatur. Jika tidak, tidak ditentukan._WCHAR_T_DEFINEDDidefinisikan sebagai 1 ketika opsi kompilator default/Zc:wchar_tdiatur._WCHAR_T_DEFINEDMakro didefinisikan tetapi tidak memiliki nilai jika/Zc:wchar_t-opsi pengkompilasi diatur, danwchar_tdidefinisikan dalam file header sistem yang disertakan dalam proyek Anda. Jika tidak, tidak ditentukan._WIN32Didefinisikan sebagai 1 ketika target kompilasi adalah ARM 32-bit, ARM 64-bit, x86, x64, atau ARM64EC. Jika tidak, tidak ditentukan._WIN64Didefinisikan sebagai 1 ketika target kompilasi adalah ARM 64-bit, x64, atau ARM64EC. Jika tidak, tidak ditentukan._WINRT_DLLDidefinisikan sebagai 1 ketika dikompilasi sebagai C++ dan keduanya/ZW(Windows Runtime Compilation) dan/LDatau/LDdopsi kompilator diatur. Jika tidak, tidak ditentukan.
Tidak ada makro praprosesor yang mengidentifikasi versi pustaka ATL atau MFC yang telah ditentukan sebelumnya oleh pengkompilasi. Header pustaka ATL dan MFC menentukan makro versi ini secara internal. Mereka tidak terdefinisi dalam arahan prapemroseduran yang dibuat sebelum header yang diperlukan disertakan.
_ATL_VERDidefinisikan<atldef.h>sebagai bilangan bulat literal yang mengodekan nomor versi ATL._MFC_VERDidefinisikan<afxver_.h>sebagai bilangan bulat literal yang mengodekan nomor versi MFC.