Jawaban:
_MSC_VER
dan mungkin _MSC_FULL_VER
itulah yang Anda butuhkan. Anda juga dapat memeriksa visualc.hpp di sembarang peningkatan instal untuk beberapa contoh penggunaan.
Beberapa nilai untuk versi yang lebih baru dari kompiler adalah:
MSVC++ 14.24 _MSC_VER == 1924 (Visual Studio 2019 version 16.4)
MSVC++ 14.23 _MSC_VER == 1923 (Visual Studio 2019 version 16.3)
MSVC++ 14.22 _MSC_VER == 1922 (Visual Studio 2019 version 16.2)
MSVC++ 14.21 _MSC_VER == 1921 (Visual Studio 2019 version 16.1)
MSVC++ 14.2 _MSC_VER == 1920 (Visual Studio 2019 version 16.0)
MSVC++ 14.16 _MSC_VER == 1916 (Visual Studio 2017 version 15.9)
MSVC++ 14.15 _MSC_VER == 1915 (Visual Studio 2017 version 15.8)
MSVC++ 14.14 _MSC_VER == 1914 (Visual Studio 2017 version 15.7)
MSVC++ 14.13 _MSC_VER == 1913 (Visual Studio 2017 version 15.6)
MSVC++ 14.12 _MSC_VER == 1912 (Visual Studio 2017 version 15.5)
MSVC++ 14.11 _MSC_VER == 1911 (Visual Studio 2017 version 15.3)
MSVC++ 14.1 _MSC_VER == 1910 (Visual Studio 2017 version 15.0)
MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015 version 14.0)
MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013 version 12.0)
MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012 version 11.0)
MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010 version 10.0)
MSVC++ 9.0 _MSC_FULL_VER == 150030729 (Visual Studio 2008, SP1)
MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008 version 9.0)
MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005 version 8.0)
MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio .NET 2003 version 7.1)
MSVC++ 7.0 _MSC_VER == 1300 (Visual Studio .NET 2002 version 7.0)
MSVC++ 6.0 _MSC_VER == 1200 (Visual Studio 6.0 version 6.0)
MSVC++ 5.0 _MSC_VER == 1100 (Visual Studio 97 version 5.0)
Nomor versi di atas tentu saja mengacu pada versi utama dari studio Visual Anda yang Anda lihat di kotak about, bukan ke tahun dalam namanya. Daftar lengkap dapat ditemukan di sini . Mulai baru-baru ini , Visual Studio akan mulai memperbarui rentangnya secara monoton, artinya Anda harus memeriksa rentang, daripada nilai kompilator yang tepat.
cl.exe /?
akan memberikan petunjuk tentang versi yang digunakan, misalnya:
c:\program files (x86)\microsoft visual studio 11.0\vc\bin>cl /?
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.50727.1 for x86
.....
#if defined _MSC_VER # if _MSC_VER >= 1800 # include <inttypes.h>
. inttypes.h tidak dapat ditemukan. Sangat aneh
_MSC_VER
. Semoga ini bisa membantu
Yap _MSC_VER adalah makro yang akan memberi Anda versi kompiler. Jumlah rilis Visual C ++ terakhir adalah dalam bentuk <compiler-major-version>.00.<build-number>
, di mana 00 adalah angka minor. Jadi _MSC_VER
akan dievaluasi <major-version><minor-version>
.
Anda dapat menggunakan kode seperti ini:
#if (_MSC_VER == 1500)
// ... Do VC9/Visual Studio 2008 specific stuff
#elif (_MSC_VER == 1600)
// ... Do VC10/Visual Studio 2010 specific stuff
#elif (_MSC_VER == 1700)
// ... Do VC11/Visual Studio 2012 specific stuff
#endif
Tampaknya pembaruan antara rilis berturut-turut dari kompiler, belum dimodifikasi compiler-minor-version
, jadi kode berikut ini tidak diperlukan:
#if (_MSC_VER >= 1500 && _MSC_VER <= 1600)
// ... Do VC9/Visual Studio 2008 specific stuff
#endif
Akses ke informasi versi yang lebih terperinci (seperti nomor kompiler build) dapat ditemukan menggunakan variabel pra-prosesor bawaan lainnya di sini .
_MSC_VER_ == 1500
, namun jika MS, memang memodifikasi _MSC_VER
pembaruan dengan kompiler, paket layanan, dll (saya rasa mereka tidak pernah punya), maka == 1500
cek bisa rusak. Itulah sebabnya saya mengkodekannya seperti itu.
_MSC_VER harus didefinisikan ke nomor versi tertentu. Anda dapat # jika ada di dalamnya, atau Anda dapat menggunakan define yang sebenarnya dan melakukan tes runtime. (Jika karena alasan tertentu Anda ingin menjalankan kode yang berbeda berdasarkan pada kompiler yang dikompilasinya? Ya, mungkin Anda mencari #ifdef. :))
Dengan menggunakan _MSC_VER
makro.
Sebagai jawaban yang lebih umum, http://sourceforge.net/p/predef/wiki/Home/ mengelola daftar makro untuk mendeteksi kompiler khusus, sistem operasi, arsitektur, standar, dan banyak lagi.
Ini agak lama tetapi harus membantu Anda memulai:
//******************************************************************************
// Automated platform detection
//******************************************************************************
// _WIN32 is used by
// Visual C++
#ifdef _WIN32
#define __NT__
#endif
// Define __MAC__ platform indicator
#ifdef macintosh
#define __MAC__
#endif
// Define __OSX__ platform indicator
#ifdef __APPLE__
#define __OSX__
#endif
// Define __WIN16__ platform indicator
#ifdef _Windows_
#ifndef __NT__
#define __WIN16__
#endif
#endif
// Define Windows CE platform indicator
#ifdef WIN32_PLATFORM_HPCPRO
#define __WINCE__
#endif
#if (_WIN32_WCE == 300) // for Pocket PC
#define __POCKETPC__
#define __WINCE__
//#if (_WIN32_WCE == 211) // for Palm-size PC 2.11 (Wyvern)
//#if (_WIN32_WCE == 201) // for Palm-size PC 2.01 (Gryphon)
//#ifdef WIN32_PLATFORM_HPC2000 // for H/PC 2000 (Galileo)
#endif
_MSC_VER
tidak mengharuskan Anda untuk memasukkan stdio.h
, yang dapat dengan mudah diujiecho int i = _MSC_VER; > tmp.c
cl /nologo /c tmp.c
Di studio visual, buka bantuan | tentang dan lihat versi Visual Studio yang Anda gunakan untuk mengkompilasi aplikasi Anda.