it-swarm-tr.com

Belirli bir Visual Studio sürümüyle Kod Derleyip Derlemediğimi Nasıl Algılayabilirim?

Belirli bir Microsoft Visual Studio sürümünde derlenip derlenmediğimi bilmenin bir yolu var mı?

253
Vhaerun

_MSC_VER ve muhtemelen _MSC_FULL_VER ihtiyacınız olan şey. Ayrıca visualc.hpp dosyasını bazı kullanım örnekleri için herhangi bir son yükseltme kurulumunda da inceleyebilirsiniz.

Derleyicinin daha yeni sürümleri için bazı değerler:

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)

Tabii ki yukarıdaki sürüm numarası, Visual Studio’nun adındaki yıl için değil, yaklaşık kutusunda gördüğünüz ana sürümüne atıfta bulunur. Tam bir liste bulunabilir burada . Yakın zamanda başlayacak , Visual Studio, aralıklarını monoton bir şekilde güncellemeye başlayacaktır, yani kesin derleyici değerleri yerine aralıkları kontrol etmeniz gerekir.

cl.exe /?, kullanılan versiyonun ipucunu verecektir;

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
.....
504
jilles de wit

Yep _MSC_VER, derleyici sürümünü alacağınız makrodur. Visual C++ 'ın son sürümleri, <compiler-major-version>.00.<build-number> biçimindeydi, burada 00 küçük sayıdır. Öyleyse _MSC_VER, <major-version><minor-version> olarak değerlendirecektir.

Bu gibi bir kod kullanabilirsiniz:

#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

Derleyicinin ardışık sürümleri arasındaki güncellemeler görünüyor, compiler-minor-version ayarını değiştirmedi, bu nedenle aşağıdaki kod gerekli değil:

#if (_MSC_VER >= 1500 && _MSC_VER <= 1600)
   // ... Do VC9/Visual Studio 2008 specific stuff
#endif

Daha ayrıntılı sürüm bilgilerine (derleyici derleme numarası gibi) erişim, diğer yerleşik işlem öncesi değişkenleri kullanarak bulunabilir burada .

43
display101

_MSC_VER, belirli bir sürüm numarasına tanımlanmalıdır. Üzerinde #ifdef kullanabilirsiniz ya da gerçek tanımlamayı kullanabilir ve bir çalışma zamanı testi yapabilirsiniz. (Eğer bir nedenden dolayı hangi derleyiciyle derlendiğine bağlı olarak farklı kodlar çalıştırmak istiyorsan? Evet, muhtemelen #ifdef'i arıyordun :))

11
DJ Capelis

_MSC_VER makrosunu kullanarak.

6
Jeff Hubbard

Daha genel bir cevap olarak http://sourceforge.net/p/predef/wiki/Home/ , belirli derleyicileri, işletim sistemlerini, mimarileri, standartları ve daha fazlasını tespit etmek için bir makro listesi tutar.

3
Clifford

Bu biraz eski ama başlaman gerek:

//******************************************************************************
// 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
1
Rob Basler