-Dd = c ++ 11 और -std = gnu ++ 11 में क्या अंतर हैं?


132

क्या अंतर हैं -std=c++11और -std=gnu++11जीसीसी और बजना के लिए संकलन पैरामीटर के रूप में? c99और के साथ एक ही सवाल gnu99? मुझे C ++ और C मानकों के बारे में पता है, यह उन मापदंडों में अंतर है जो मेरी रुचि रखते हैं।

मैंने कहीं पढ़ा है कि इसे कुछ एक्सटेंशन के साथ करना है, लेकिन यह मेरे लिए स्पष्ट नहीं है कि कौन से और कैसे एक नए प्रोजेक्ट के लिए एक या दूसरे के बीच चयन करना है।


5
वे gnuलोग एक्सटेंशन का उल्लेख करते हैं, और यदि आप पोर्टेबल कोड लिखना चाहते हैं, तो आपको मानक से चिपके रहना चाहिए और एक्सटेंशन से पूरी तरह बचना चाहिए।
जुआनकोपंजा

जवाबों:


91

जैसा कि आपने खुद पता लगाया है, दो विकल्पों के बीच का अंतर यह है कि क्या जीएनयू एक्सटेंशन जो C ++ मानक का उल्लंघन / विस्तार करता है, सक्षम हैं या नहीं। GNU C ++ एक्सटेंशन यहाँ वर्णित हैं । आप अपने C ++ कार्यक्रमों में अधिकांश GNU C एक्सटेंशन ( यहां वर्णित ) का उपयोग कर सकते हैं । यहां-Wpedantic GCC विकल्प के बारे में पढ़ना भी उपयोगी होगा ।

ध्यान दें कि कुछ एक्सटेंशन अभी भी उपयोग करते समय प्रभावी हो सकते हैं -std=c++11, जब तक कि वे मानक के विपरीत नहीं होते हैं। उदाहरण के लिए, जब मिनगॉइल कंपाइलर का उपयोग किया जाता है, तो मुझे काम करने के लिए एक्सटेंशन की आवश्यकता होती है Boost.Lexical_Cast। लेकिन, जब तक आप उनमें से किसी का उपयोग नहीं करते हैं, तब तक आप अधिकतम पोर्टेबिलिटी के लिए एक्सटेंशन के बिना मानक से चिपके रहना बेहतर है। यह आपके काम आ सकता है यदि आप कंपाइलर बदलने के लिए खुद को मजबूर पाते हैं।


4
हाँ, मैं एक्सटेंशन से बचता हूं क्योंकि मैं ऐसा कुछ भी करने की सलाह नहीं देता जो विशेष रूप से मानक द्वारा परिभाषित नहीं है ... लेकिन फिर भी, "उल्लंघन" एक अजीब और भरी हुई अवधि है, जब इनमें से बहुत सारे एक्सटेंशन हैं, मानक का उपयोग करने के लिए , केवल कार्यान्वयन-परिभाषित करने या उन चीजों को निर्दिष्ट करने के लिए जो मानक पर चुप हैं - या शायद सभी एक्सटेंशन भी ... क्या आपके पास किसी भी GNU एक्सटेंशन के लिए एक उद्धरण है जो मानक को स्पष्ट रूप से परिभाषित करने वाली चीज़ से अलग कुछ करके मानक का उल्लंघन करता है?
अंडरस्कोर_ड

9
हालांकि यह उत्तर एक अच्छा सामान्य है, तो क्या आप इसे संपादित करने पर विचार करेंगे ताकि कम से कम उन एक्सटेंशनों को सूचीबद्ध किया जा सके जो सक्षम तो हैं gnu11लेकिन अंदर नहीं c++11? आपके द्वारा लिंक की गई सूची सभी एक्सटेंशनों की है, और जैसा कि आप स्वयं इंगित करते हैं कि उनमें से कुछ c++11भी (जैसे __restrict__) के साथ सक्षम हैं ।
8::

मुझे अब जो पता चला है, और झंडे के दस्तावेज को देखकर कभी निष्कर्ष नहीं निकाला जाएगा, वह निम्न है: -std = c ++ 11 ट्रिग्रेड्स -std = gnu ++ 11 को फिर से सक्षम करता है और उन्हें अनदेखा करता है, जैसे यह जब पूरी तरह से छोड़ दिया जाता है
डेनियल 82
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.