2008-09-16 5 views

उत्तर

464

_MSC_VER और संभवतः _MSC_FULL_VER आपको जो चाहिए वह है। आप कुछ उपयोग उदाहरणों के लिए किसी भी हालिया बूस्ट इंस्टॉलेशन में visualc.hpp की भी जांच कर सकते हैं।

संकलक के नवीनतम संस्करण के कुछ मान रहे हैं:

MSVC++ 14.1 _MSC_VER == 1912 (Visual Studio 2017) 
MSVC++ 14.1 _MSC_VER == 1911 (Visual Studio 2017) 
MSVC++ 14.1 _MSC_VER == 1910 (Visual Studio 2017) 
MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015) 
MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013) 
MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012) 
MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010) 
MSVC++ 9.0 _MSC_FULL_VER == 150030729 (Visual Studio 2008, SP1) 
MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008) 
MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005) 
MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio 2003) 
MSVC++ 7.0 _MSC_VER == 1300 
MSVC++ 6.0 _MSC_VER == 1200 
MSVC++ 5.0 _MSC_VER == 1100 

निश्चित रूप से ऊपर संस्करण संख्या के बारे में आप बॉक्स में दिखाई अपने दृश्य स्टूडियो के मुख्य संस्करण को संदर्भित करता है, एक साल में नहीं करने के लिए नाम। एक पूरी सूची here मिल सकती है। Starting recently, विजुअल स्टूडियो इसकी श्रेणी को एकान्त रूप से अद्यतन करना शुरू कर देगा, जिसका अर्थ है कि आपको सटीक कंपाइलर मानों की बजाय श्रेणियों की जांच करनी चाहिए।

cl.exe /? इस्तेमाल किया संस्करण का एक संकेत है, जैसे दे देंगे:

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 
..... 
+0

que pas ???? आप आमतौर पर संस्करण की जांच के लिए> = == –

+27

क्षमा करें, लेकिन माइक्रोसॉफ्ट इस जानकारी को खोजने में आसान क्यों नहीं बनाते? यह पोस्ट बहुत उपयोगी है लेकिन इसकी आवश्यकता नहीं होनी चाहिए। – chrisw

+5

ऐसा लगता है कि यह मैक्रो प्रोजेक्ट द्वारा उपयोग किए गए कंपाइलर संस्करण को प्रतिबिंबित नहीं करता है। अर्थात।यदि आप प्रोजेक्ट को अपग्रेड किए बिना एक नए संस्करण में एक वीएस -2010 प्रोजेक्ट खोलते हैं तो यह मैक्रो इस्तेमाल किए जा रहे कंपाइलर को प्रतिबिंबित नहीं करता है - केवल आईडीई संस्करण। – thomthom

-15

दृश्य स्टूडियो में, सहायता के लिए जाएं। इसके बारे में और विजुअल स्टूडियो के संस्करण को देखें जिसे आप अपने ऐप को संकलित करने के लिए उपयोग कर रहे हैं।

+6

यह गंभीर नहीं हो सकता है। विशेष रूप से इस तरह की प्रतिष्ठा वाले किसी से। मुझे लगता है कि आप सिर्फ मजाक कर रहे थे? – BuvinJ

+1

मुझे लगता है कि उसने सिर्फ प्रश्न को अलग तरीके से व्याख्या की है। आखिरकार, यह सवाल के पहले जवाबों में से एक है। –

9

_MSC_VER को एक विशिष्ट संस्करण संख्या में परिभाषित किया जाना चाहिए। आप या तो #ifdef कर सकते हैं, या आप वास्तविक परिभाषा का उपयोग कर सकते हैं और रनटाइम परीक्षण कर सकते हैं। (यदि किसी कारण से आप किस संकलक के साथ संकलित किए गए थे, इस पर आधारित विभिन्न कोड चलाने के लिए चाहते थे? हाँ, शायद आप #ifdef की तलाश में थे। :))

6

_MSC_VER मैक्रो का उपयोग करके।

1

यह एक छोटे से पुराना है लेकिन मिलना चाहिए आप आरंभ:

//****************************************************************************** 
// 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 
+0

मुझे यह वोट शीर्ष वोट वाले एक से अधिक पसंद है। क्योंकि _MSC_VER की आवश्यकता है कि आप stdio.h –

+0

'_MSC_VER' में आपको 'stdio.h' शामिल करने की आवश्यकता नहीं है, जिसे आसानी से परीक्षण किया जा सकता है' echo int i = _MSC_VER; > tmp.c' 'cl/nologo/c tmp.c' –

38

हाँ _MSC_VER मैक्रो मिल जाएगा कि है आप संकलक संस्करण। विजुअल सी ++ के रिलीज की अंतिम संख्या फॉर्म <compiler-major-version>.00.<build-number> है, जहां 00 मामूली संख्या है। तो _MSC_VER<major-version><minor-version> का मूल्यांकन करेगा।

आप इस तरह कोड का उपयोग कर सकते हैं:

#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 

यह संकलक की लगातार विज्ञप्ति के बीच अपडेट दिखाई देता है, संशोधित नहीं किया है compiler-minor-version, तो निम्न कोड की आवश्यकता नहीं है:

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

पहुँच अधिक विस्तृत संस्करण जानकारी (जैसे कंपाइलर बिल्ड नंबर) को अन्य बिल्टिन प्री-प्रोसेसर चर here का उपयोग करके पाया जा सकता है।

+0

आपको उस मामले में == 1500 उस मामले में –

+0

@ जोसे की जांच करने की आवश्यकता है, सच है कि हम इसे '_MSC_VER_ == 1500' के साथ वीसी ++ 9 की जांच करने के लिए सरल बना सकते हैं, हालांकि अगर एमएस ने कंपाइलर अपडेट, सर्विस पैक इत्यादि के साथ '_MSC_VER' को संशोधित किया है (मुझे नहीं लगता कि उनके पास कभी भी है), तो' == 1500' चेक तोड़ सकती है। यही कारण है कि मैंने इसे इस तरह से कोड किया है। – display101

+0

__MSC_VER संकलक के संस्करण के प्रमुख और मामूली संख्या घटकों का मूल्यांकन करता है। यह अद्यतन के साथ नहीं बदलेगा, _MSC_FULL_VER है जिसमें बिल्ड नंबर भी शामिल है, मुझे इसका उपयोग करने की आवश्यकता नहीं है। –

3

अधिक सामान्य उत्तर http://sourceforge.net/p/predef/wiki/Home/ स्पेसिक कंपाइलर्स, ऑपरेटिंग सिस्टम, आर्किटेक्चर, मानकों और अन्य का पता लगाने के लिए मैक्रोज़ की एक सूची बनाए रखता है।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^