विजुअल स्टूडियो में C ++ 17 संकलन को कैसे सक्षम करें?


120

मैं C ++ 17 सुविधाओं का उपयोग करना चाहता हूं।

मैं Microsoft विज़ुअल स्टूडियो में C ++ 14 से C ++ 17 में संकलन कैसे स्विच कर सकता हूं?

या यह वीएस के रिलीज संस्करणों में उपलब्ध नहीं है?


4
कौन सी C ++ 17 विशेषताएँ? विजुअल स्टूडियो का कौन सा संस्करण? आप सी ++ 17 के बारे में पूछ रहे हैं क्यों आप अपने प्रश्न को टैग किया c++11और c++14?
iljarn

6
c ++ 17 उपलब्ध नहीं था, और मैंने सोचा कि जो लोग C ++ के विशिष्ट संस्करणों में रुचि रखते हैं, वे इसे स्विच करना बेहतर जानते हैं। उदाहरण के लिए मैं std :: वेक्टर.emplace_back () नव निर्मित तत्व का संदर्भ देना चाहता हूं। मुझे पता है कि +1 लाइन, और मुझे वह संदर्भ मिलता है, लेकिन मैं अपने प्रश्न का उत्तर वैसे भी जानना चाहूंगा। वीएस कम्युनिटी 2015 (14.0.25431.01 अपडेट 3)
टुदवारी

आपको शायद यहाँ जाँच करनी चाहिए: blogs.msdn.microsoft.com/visualstudio
मिकेल एफ

3
आप वीएस में विशिष्ट भाषा बोलियों को सक्षम नहीं कर सकते, आपको जो कुछ भी उन्होंने लागू किया है वह मिलता है। यदि आप VS21015 का उपयोग कर रहे हैं, लेकिन भाषा सुविधाओं के साथ ऐसा नहीं है, तो आपको मानक लाइब्रेरी सुविधाओं के साथ सी ++ 17 में बहुत अच्छी किस्मत मिल सकती है।
प्रेटोरियन

1
@preat MSVC 2017 में "नवीनतम" सेटिंग है, लेकिन वह अभी तक जारी नहीं हुई है।
यक - एडम नेवरामॉन्ट

जवाबों:


161

अब एक ड्रॉप डाउन है (कम से कम वीएस 2017.3.5 के बाद से) जहां आप विशेष रूप से सी ++ 17 का चयन कर सकते हैं। उपलब्ध विकल्प हैं (परियोजना के तहत> गुण> C / C ++> भाषा> C ++ भाषा मानक)

  • आईएसओ सी ++ 14 मानक। msvc कमांड लाइन विकल्प:/std:c++14
  • आईएसओ सी ++ 17 स्टैंडर्ड। msvc कमांड लाइन विकल्प:/std:c++17
  • नवीनतम मसौदा मानक। msvc कमांड लाइन विकल्प:/std:c++latest

(मैं शर्त लगाता हूं, एक बार सी ++ 20 बाहर है और विजुअल स्टूडियो द्वारा पूरी तरह से समर्थित है /std:c++20)


3
जब आप मैन्युअल रूप से संकलक विकल्प (VS2017 के साथ परीक्षण) दर्ज करना पसंद करते हैं, तो सिंटैक्स -std:c++14, -std:c++17और -std:c++latestयह भी काम करता है।
रूई डंटन

क्या यह पहले से ही उत्तर से स्पष्ट नहीं है, या क्या आप विशेष रूप -से /std:स्विच के बजाय मेरी सूची में हैं?
जोहान लुंडबर्ग

3
gccया आते समय मुझे इसका फायदा दिखता है clang। फिर -कम घुसपैठ है (हालांकि सिंटैक्स अभी भी थोड़ा अलग है ( :इसके बजाय =))।
रूई डंटन

वीएस 2019 में, प्रोजेक्ट प्रॉपर्टीज को पाने के लिए, "सॉल्यूशन एक्सप्लोरर" पर जाएं, प्रोजेक्ट टाइटल पर राइट क्लिक करें और प्रॉपर्टीज चुनें। तो इस पोस्ट के निर्देशों का पालन करें।
बबरबैग

1
@AndreiKrasutski। अभी तक कोई आईएसओ C ++ 20 नहीं है लेकिन / std: c ++ नवीनतम में कुछ समर्थन है। अगले वर्ष C ++ 20 मानक अपेक्षित है। मैंने अपने जवाब में एक टिप्पणी का संपादन किया।
जोहान लुंडबर्ग

31

MSBuild (दृश्य स्टूडियो परियोजना / समाधान * .vcproj / *। Sln ) :

प्रोजेक्ट सेटिंग्स में अतिरिक्त विकल्पों में जोड़ें: /std:c++latestनवीनतम सुविधाओं को सक्षम करने के लिए - वर्तमान में VS2017, VS2015 अपडेट 3 के रूप में C ++ 17।

https://blogs.msdn.microsoft.com/vcblog/2016/06/07/standards-version-switches-in-the-compiler/

/permissive- गैर-मानक C ++ एक्सटेंशन को अक्षम कर देगा और VS2017 में मानक अनुरूपता को सक्षम करेगा।

https://blogs.msdn.microsoft.com/vcblog/2016/11/16/permissive-switch/

EDIT (अक्टूबर 2018): नवीनतम VS2017 सुविधाओं को यहां प्रलेखित किया गया है:

https://docs.microsoft.com/en-gb/cpp/build/reference/std-specify-language-standard-version

VS2017 समर्थन करता है: /std:[c++14|c++17|c++latest]अब। ये झंडे परियोजना के संपत्ति पृष्ठों के माध्यम से सेट किए जा सकते हैं:

इस संकलक विकल्प को Visual Studio विकास वातावरण में सेट करने के लिए

  1. प्रोजेक्ट के प्रॉपर्टी पेज डायलॉग बॉक्स को खोलें। विवरण के लिए, प्रोजेक्ट गुण के साथ कार्य करना देखें।
  2. कॉन्फ़िगरेशन गुण, C / C ++, भाषा चुनें।
  3. C ++ भाषा मानक में, ड्रॉपडाउन नियंत्रण से समर्थन के लिए भाषा मानक चुनें, फिर अपने परिवर्तनों को सहेजने के लिए OK या लागू करें चुनें।

CMake :

विजुअल स्टूडियो 2017 (15.7+) CMake परियोजनाओं का समर्थन करता है। CMake विभिन्न तरीकों से आधुनिक C ++ सुविधाओं को सक्षम करना संभव बनाता है। CMakeLists.txt में लक्ष्य की संपत्ति सेट करके एक आधुनिक C ++ मानक को सक्षम करने के लिए सबसे बुनियादी विकल्प है :

add_library (${PROJECT_NAME})
set_property (TARGET ${PROJECT_NAME}
  PROPERTY
    # Enable C++17 standard compliance
    CXX_STANDARD 17
)

एक इंटरफ़ेस लाइब्रेरी के मामले में:

add_library (${PROJECT_NAME} INTERFACE)
target_compile_features (${PROJECT_NAME}
  INTERFACE
    # Enable C++17 standard compliance
    cxx_std_17
)

मैंने अपने वीएस २०१ in में ड्रॉपडाउन किया, लेकिन फिर भी कंपाइलर सी ++ ९, स्टैण्डर्ड लगाते रहे, क्या हेक है
ट्रैविस सु

10

5

यदि विजुअल स्टूडियो 2017 में मौजूदा विजुअल स्टूडियो 2015 समाधान को लाया जा रहा है और आप इसे c ++ 17 देशी कंपाइलर के साथ बनाना चाहते हैं, तो आपको पहले समाधान / प्रोजेक्ट्स को v141 पर फिर से सेट करना चाहिए, जब तक ड्रॉपडाउन ऊपर वर्णित नहीं होगा (कॉन्फ़िगरेशन गुण -> C / सी ++ -> भाषा -> भाषा मानक)


2

दृश्य स्टूडियो 2019 संस्करण:

ड्रॉप डाउन मेनू को यहां ले जाया गया:

  • प्रोजेक्ट पर राइट क्लिक (समाधान नहीं)
  • गुण (या Alt + Enter)
  • बाएं मेनू से कॉन्फ़िगरेशन गुण चुनें
  • सामान्य
  • बीच में "C ++ भाषा मानक" नामक एक विकल्प है
  • इसके आगे ड्रॉप डाउन मेन्यू है
  • यहां आप डिफ़ॉल्ट, आईएसओ सी ++ 14, 17 या नवीनतम का चयन कर सकते हैं
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.