Makro yang telah ditentukan sebelumnya
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.
__cplusplus
Didefinisikan 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/Za
opsi pengkompilasi ditentukan. Dimulai di Visual Studio 2022 versi 17.2, itu didefinisikan sebagai 1 saat dikompilasi sebagai C dan jika/std:c11
opsi atau/std:c17
pengkompilasi 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/std
satu 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/std
satu 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/std
satu 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/std
satu opsi C11 atau C17 ditentukan.__STDC_VERSION__
Didefinisikan saat dikompilasi sebagai C dan salah/std
satu opsi C11 atau C17 ditentukan. Ini meluas ke201112L
untuk/std:c11
, dan201710L
untuk/std:c17
.__STDCPP_DEFAULT_NEW_ALIGNMENT__
Ketika/std:c17
atau lebih baru ditentukan, makro ini meluas kesize_t
literal 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_ARCH
Didefinisikan 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_ARCH
adalah 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:ATOM
opsi pengkompilasi diatur dan target pengkompilasi adalah x86 atau x64. Jika tidak, tidak ditentukan.__AVX__
Didefinisikan sebagai 1 ketika/arch:AVX
opsi , ,/arch:AVX2
/arch:AVX512
atau/arch:AVX10.1
pengkompilasi diatur dan target pengkompilasi adalah x86 atau x64. Jika tidak, tidak ditentukan.__AVX2__
Didefinisikan sebagai 1 ketika/arch:AVX2
opsi ,/arch:AVX512
atau/arch:AVX10.1
pengkompilasi diatur dan target pengkompilasi adalah x86 atau x64. Jika tidak, tidak ditentukan.__AVX512BW__
Didefinisikan sebagai 1 ketika/arch:AVX512
opsi atau/arch:AVX10.1
pengkompilasi diatur dan target pengkompilasi adalah x86 atau x64. Jika tidak, tidak ditentukan.__AVX512CD__
Didefinisikan sebagai 1 ketika/arch:AVX512
opsi atau/arch:AVX10.1
pengkompilasi diatur dan target pengkompilasi adalah x86 atau x64. Jika tidak, tidak ditentukan.__AVX512DQ__
Didefinisikan sebagai 1 ketika/arch:AVX512
opsi atau/arch:AVX10.1
pengkompilasi diatur dan target pengkompilasi adalah x86 atau x64. Jika tidak, tidak ditentukan.__AVX512F__
Didefinisikan sebagai 1 ketika/arch:AVX512
opsi atau/arch:AVX10.1
pengkompilasi diatur dan target pengkompilasi adalah x86 atau x64. Jika tidak, tidak ditentukan.__AVX512VL__
Didefinisikan sebagai 1 ketika/arch:AVX512
opsi atau/arch:AVX10.1
pengkompilasi 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.1
opsi pengkompilasi diatur dan target pengkompilasi adalah x86 atau x64. Jika tidak, tidak ditentukan._CHAR_UNSIGNED
Didefinisikan sebagai 1 jika jenis defaultchar
tidak ditandatangani. Nilai ini ditentukan ketika/J
opsi pengkompilasi (Jenis karakter default tidak ditandatangani) diatur. Jika tidak, tidak ditentukan.__CLR_VER
Didefinisikan sebagai bilangan bulat literal yang mewakili versi Common Language Runtime (CLR) yang digunakan untuk mengkompilasi aplikasi. Nilai dikodekan dalam formulirMmmbbbbb
, di manaM
adalah versi utama runtime,mm
adalah versi minor dari runtime, danbbbbb
merupakan nomor build.__CLR_VER
didefinisikan jika/clr
opsi pengkompilasi diatur. Jika tidak, tidak ditentukan.// clr_ver.cpp // compile with: /clr using namespace System; int main() { Console::WriteLine(__CLR_VER); }
_CONTROL_FLOW_GUARD
Didefinisikan sebagai 1 ketika/guard:cf
opsi 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.exampleClass
Konstruktor 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_cli
Didefinisikan sebagai nilai literal bilangan bulat 200406 saat dikompilasi sebagai C++ dan/clr
opsi pengkompilasi diatur. Jika tidak, tidak ditentukan. Ketika ditentukan,__cplusplus_cli
berlaku 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_winrt
Didefinisikan sebagai nilai literal bilangan bulat 201009 saat dikompilasi sebagai C++ dan/ZW
opsi kompilator (Windows Runtime Compilation) diatur. Jika tidak, tidak ditentukan._CPPRTTI
Didefinisikan sebagai 1 jika/GR
opsi kompilator (Aktifkan Informasi Jenis Run-Time) diatur. Jika tidak, tidak ditentukan._CPPUNWIND
Didefinisikan sebagai 1 jika satu atau beberapa/GX
opsi kompilasi (Aktifkan Penanganan Pengecualian),/clr
(Kompilasi Runtime Bahasa Umum), atau/EH
(Model Penanganan Pengecualian) diatur. Jika tidak, tidak ditentukan._DEBUG
Didefinisikan sebagai 1 ketika/LDd
opsi , ,/MDd
atau/MTd
kompilator diatur. Jika tidak, tidak ditentukan._DLL
Didefinisikan sebagai 1 ketika/MD
opsi 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/EP
opsi atau/P
pengkompilasi.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/EP
opsi atau/P
pengkompilasi. Saat dikompilasi untuk target 64-bit, konvensi panggilan secara__cdecl
default. 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/EP
opsi atau/P
pengkompilasi. Untuk contoh penggunaan, lihat__FUNCDNAME__
makro._INTEGRAL_MAX_BITS
Didefinisikan sebagai nilai literal bilangan bulat 64, ukuran maksimum (dalam bit) untuk jenis integral non-vektor. 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_VOLATILE
Didefinisikan sebagai 1 jika/volatile:iso
opsi pengkompilasi diatur. Jika tidak, tidak ditentukan._KERNEL_MODE
Didefinisikan sebagai 1 jika/kernel
opsi pengkompilasi (Buat Biner Mode Kernel) diatur. Jika tidak, tidak ditentukan._M_AMD64
Didefinisikan sebagai nilai literal bilangan bulat 100 untuk kompilasi yang menargetkan prosesor x64 atau ARM64EC. Jika tidak, tidak ditentukan._M_ARM
Didefinisikan sebagai nilai harfiah bilangan bulat 7 untuk kompilasi yang menargetkan prosesor ARM. Tidak ditentukan untuk ARM64, ARM64EC, dan target lainnya._M_ARM_ARMV7VE
Didefinisikan sebagai 1 ketika/arch:ARMv7VE
opsi kompilator diatur untuk kompilasi yang menargetkan prosesor ARM. Jika tidak, tidak ditentukan._M_ARM_FP
Didefinisikan sebagai nilai literal bilangan bulat yang menunjukkan opsi pengkompilasi mana yang/arch
ditetapkan untuk target prosesor ARM. Jika tidak, tidak ditentukan.Nilai dalam rentang 30-39 jika tidak ada
/arch
opsi ARM yang ditentukan, menunjukkan arsitektur default untuk ARM diatur (VFPv3
).Nilai dalam rentang 40-49 jika
/arch:VFPv4
ditetapkan.Untuk informasi selengkapnya, lihat
/arch
(ARM).
_M_ARM64
Didefinisikan sebagai 1 untuk kompilasi yang menargetkan ARM64. Jika tidak, tidak ditentukan._M_ARM64EC
Didefinisikan sebagai 1 untuk kompilasi yang menargetkan ARM64EC. Jika tidak, tidak ditentukan._M_CEE
Didefinisikan sebagai 001 jika ada/clr
opsi pengkompilasi (Kompilasi Runtime Bahasa Umum) diatur. Jika tidak, tidak ditentukan._M_CEE_PURE
Tidak digunakan lagi dimulai di Visual Studio 2015. Didefinisikan sebagai 001 jika/clr:pure
opsi pengkompilasi diatur. Jika tidak, tidak ditentukan._M_CEE_SAFE
Tidak digunakan lagi dimulai di Visual Studio 2015. Didefinisikan sebagai 001 jika/clr:safe
opsi pengkompilasi diatur. Jika tidak, tidak ditentukan._M_FP_CONTRACT
Tersedia dimulai di Visual Studio 2022. Didefinisikan sebagai 1 jika/fp:contract
opsi atau/fp:fast
pengkompilasi diatur. Jika tidak, tidak ditentukan._M_FP_EXCEPT
Didefinisikan sebagai 1 jika/fp:except
opsi atau/fp:strict
pengkompilasi diatur. Jika tidak, tidak ditentukan._M_FP_FAST
Didefinisikan sebagai 1 jika/fp:fast
opsi pengkompilasi diatur. Jika tidak, tidak ditentukan._M_FP_PRECISE
Didefinisikan sebagai 1 jika/fp:precise
opsi pengkompilasi diatur. Jika tidak, tidak ditentukan._M_FP_STRICT
Didefinisikan sebagai 1 jika/fp:strict
opsi pengkompilasi diatur. Jika tidak, tidak ditentukan._M_IX86
Didefinisikan sebagai nilai literal bilangan bulat 600 untuk kompilasi yang menargetkan prosesor x86. Makro ini tidak ditentukan untuk target kompilasi x64 atau ARM._M_IX86_FP
Didefinisikan sebagai nilai literal bilangan bulat yang menunjukkan/arch
opsi 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:IA32
opsi pengkompilasi diatur.1 jika
/arch:SSE
opsi pengkompilasi diatur.2 jika
/arch:SSE2
opsi ,/arch:AVX
,/arch:AVX2
,/arch:AVX512
atau/arch:AVX10.1
kompilator diatur. Nilai ini adalah default jika/arch
opsi pengkompilasi tidak ditentukan. Ketika/arch:AVX
ditentukan, makro__AVX__
juga ditentukan. Ketika/arch:AVX2
ditentukan, dan__AVX__
__AVX2__
juga didefinisikan. Ketika/arch:AVX512
ditentukan,__AVX__
, ,__AVX2__
,__AVX512BW__
,__AVX512CD__
,__AVX512DQ__
__AVX512F__
, dan__AVX512VL__
juga ditentukan. Ketika/arch:AVX10.1
ditentukan,__AVX__
, ,__AVX2__
,__AVX512BW__
,__AVX512CD__
,__AVX512DQ__
__AVX512F__
, dan__AVX512VL__
__AVX10_VER__
juga ditentukan.Untuk informasi selengkapnya, lihat
/arch
(x86).
_M_X64
Didefinisikan sebagai nilai literal bilangan bulat 100 untuk kompilasi yang menargetkan prosesor x64 atau ARM64EC. Jika tidak, tidak ditentukan._MANAGED
Didefinisikan sebagai 1 saat/clr
opsi pengkompilasi diatur. Jika tidak, tidak ditentukan._MSC_BUILD
Didefinisikan 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_BUILD
makro adalah 1. Makro ini selalu ditentukan._MSC_EXTENSIONS
Didefinisikan sebagai 1 jika opsi kompilator on-by-default/Ze
(Aktifkan Ekstensi Bahasa) diatur. Jika tidak, tidak ditentukan._MSC_FULL_VER
Didefinisikan 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_VER
193933519. 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_VER
untuk membedakannya._MSC_VER
Didefinisikan 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_VER
adalah 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_VER
versi 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 // . . . #endif
Untuk 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_LANG
Didefinisikan sebagai literal bilangan bulat yang menentukan standar bahasa C++ yang ditargetkan oleh pengkompilasi. Hanya kode yang dikompilasi sebagai C++ yang mengaturnya. Makro adalah nilai201402L
literal bilangan bulat secara default, atau ketika/std:c++14
opsi pengkompilasi ditentukan. Makro diatur ke201703L
jika/std:c++17
opsi pengkompilasi ditentukan. Makro diatur ke202002L
jika/std:c++20
opsi pengkompilasi ditentukan. Ini diatur ke nilai yang lebih tinggi dan tidak ditentukan saat/std:c++latest
opsi ditentukan. Jika tidak, makro tidak ditentukan. Opsi_MSVC_LANG
pengkompilasi makro dan/std
(Tentukan versi standar bahasa) tersedia dimulai di Visual Studio 2015 Update 3.__MSVC_RUNTIME_CHECKS
Didefinisikan sebagai 1 ketika salah/RTC
satu 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:preprocessor
kesuaian 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:preprocessor
kesuaian praproscesor diatur. Didefinisikan sebagai 1 secara default, atau ketika/Zc:preprocessor-
opsi pengkompilasi diatur, untuk menunjukkan prapemrosem tradisional sedang digunakan (pada dasarnya,/Zc:preprocessor
menggantikan yang tidak digunakan/experimental:preprocessor
lagi ).
#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
_MT
Didefinisikan sebagai 1 ketika/MD
atau/MDd
(DLL Multithreaded) atau/MTd
/MT
(Multithreaded) ditentukan. Jika tidak, tidak ditentukan._NATIVE_WCHAR_T_DEFINED
Didefinisikan sebagai 1 saat/Zc:wchar_t
opsi pengkompilasi diatur. Jika tidak, tidak ditentukan._OPENMP
Didefinisikan sebagai 200203 literal bilangan bulat, jika/openmp
opsi 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/analyze
opsi pengkompilasi diatur. Jika tidak, tidak ditentukan.__SANITIZE_ADDRESS__
Tersedia dimulai dengan Visual Studio 2019 versi 16.9. Didefinisikan sebagai 1 saat/fsanitize=address
opsi 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_NODEFAULTLIB
Didefinisikan sebagai 1 ketika/Zl
opsi pengkompilasi (Hilangkan Nama Pustaka Default) diatur. Jika tidak, tidak ditentukan._WCHAR_T_DEFINED
Didefinisikan sebagai 1 ketika opsi kompilator default/Zc:wchar_t
diatur._WCHAR_T_DEFINED
Makro didefinisikan tetapi tidak memiliki nilai jika/Zc:wchar_t-
opsi pengkompilasi diatur, danwchar_t
didefinisikan dalam file header sistem yang disertakan dalam proyek Anda. Jika tidak, tidak ditentukan._WIN32
Didefinisikan sebagai 1 ketika target kompilasi adalah ARM 32-bit, ARM 64-bit, x86, atau x64. Jika tidak, tidak ditentukan._WIN64
Didefinisikan sebagai 1 ketika target kompilasi adalah ARM 64-bit atau x64. Jika tidak, tidak ditentukan._WINRT_DLL
Didefinisikan sebagai 1 ketika dikompilasi sebagai C++ dan keduanya/ZW
(Windows Runtime Compilation) dan/LD
atau/LDd
opsi 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_VER
Didefinisikan<atldef.h>
sebagai bilangan bulat literal yang mengodekan nomor versi ATL._MFC_VER
Didefinisikan<afxver_.h>
sebagai bilangan bulat literal yang mengodekan nomor versi MFC.