जी + में -घाती झंडा का उपयोग करना है या नहीं?


16

मैं C ++ सीख रहा हूं और अभ्यास के लिए लिनक्स पर g ++ का उपयोग कर रहा हूं।

  1. मैं यह जानना चाहता हूं कि क्या प्रोग्रामर के रूप में काम करने वाले लोग g ++-upantic फ्लैग का उपयोग करते हैं और वास्तविक दुनिया में भी इसका महत्व है।

  2. अन्य संकलक के बारे में क्या, वे भी इसकी अनुमति देते हैं? क्या यह कुछ वास्तविक तथ्य बन गया है?

मुझे दिलचस्पी है क्योंकि मैं C ++ प्राइमर पढ़ रहा हूं, जहां लेखक इंगित करता है कि गैर-कास्ट एक्सप्रेशन को सरणी परिभाषा में आयाम के रूप में उपयोग करना अवैध है और जी ++ डिफ़ॉल्ट रूप से अनुमति देता है। और अन्य चीजें हो सकती हैं जिनसे मैं अनजान हूं।



जवाबों:


21

हाँ, बिल्कुल ऐसा करो। वास्तव में, आपको मैनुअल पेज का अध्ययन करने और अधिक चेतावनियों को चालू करने -pedanticऔर करने -Wallकी आवश्यकता होगी।

नहीं, कोई मानक नहीं है। MSVC /W4उदाहरण के लिए उपयोग करता है।


7
+1, मैं आमतौर पर -Wall -Wextra -Werror -pedantic -std=c++0x:)
ग्रेफेड

4
@JaredBurrows: वास्तव में मैंने -pedanticC ++ के साथ उपयोग करना बंद कर दिया है क्योंकि GCC के मैनुअल का तात्पर्य है कि यह केवल C के लिए है, और मैं -std=c++14नई परियोजनाओं में उपयोग करने के लिए स्थानांतरित हो गया हूं ।
ग्रेफेड

1
@ ग्रेफेड आह, मुझे कहना चाहिए, -Wall -Wextra -Werror -std=c++14:)
जारेड

1
मैंने बस खोज-त्रुटियों-त्रुटियों की चेतावनी दी है जो त्रुटियों को चेतावनी नहीं देते हैं।
गॉलिक

6
@VillasV अच्छी तरह -Werrorसे सभी चेतावनियों को त्रुटियों में बदल देता है। लेकिन -pedantic-errorsकेवल Standard ICO C++उल्लंघन के कारण त्रुटियां होती हैं ।
गैलिक

10

हालांकि मैंने काफी समय से C ++ को प्रोग्राम नहीं किया है, मैं आपको इस ध्वज का उपयोग करने की सलाह दूंगा। यह आपको मानक-अनुरूप कोड बनाने में मदद करता है और सभी के जीवन को आसान बना देगा। AFAIK, अधिकांश अन्य संकलक gcc / g ++ एक्सटेंशन का समर्थन नहीं करते हैं।

मैं उदाहरण के लिए इसे नफरत करता हूं, जब मैं कोड को केवल इसलिए संकलित नहीं कर सकता क्योंकि मूल डेवलपर ने गैर-मानक संकलक एक्सटेंशन के खिलाफ कोड करने का फैसला किया।

मैं शर्त लगाता हूं कि लिनक्स कार्यक्रमों की एक बड़ी मात्रा (20% कहते हैं) जो कि C / C ++ में लिखी गई थी, कुछ भी नहीं लेकिन gcc / g ++ के साथ संकलित नहीं करेंगे, जो मुझे थोड़े दुखी करता है। हमेशा मानकों का पालन करें।


2
पिछली बार जब मैंने अन्य संकलक का उपयोग करने की कोशिश की, तो मैं कहूंगा कि यह 20% की तरह था जो अन्य संकलक के साथ काम करेगा और 80% gcc एक्सटेंशन पर निर्भर करेगा।
जेरी कॉफ़िन

6

व्यक्तिगत रूप से मैं उपयोग करता हूं:

-वाल्फा -वेडा -वेडोव-वेफेक ++ -विस्तार-अलियासिंग-वंशी-उदारीकरण -Woror

इस प्रकार, चेतावनियों की मेजबानी करता है, लेकिन अधिक महत्वपूर्ण बात यह है कि सभी चेतावनियों को त्रुटियों के रूप में माना जाता है (जैसा कि अधिकांश चेतावनियां आपकी सोच में तार्किक त्रुटियां हैं)।


क्या आप 2019 में इस सूची में कुछ भी जोड़ेंगे?
अयक्सन

1
@Ayxan यह न्यूनतम सेट है जिसे मैं हर किसी के उपयोग की सलाह देता हूं। लेकिन एक गुच्छा अधिक हैं जो उपयोगी हैं। लेकिन आपको दस्तावेज़ को रीड करने और यह देखने की ज़रूरत है कि क्या वे आपके लिए उपयोगी हैं। देखिए-Wunreachable-code -Wno-long-long
मार्टिन यॉर्क

1
@ एयक्सन जब प्रोफाइलिंग कोड का निर्माण कर रहा है:-g -pg -fprofile-arcs -ftest-coverage
मार्टिन यॉर्क

1
@ एयक्सन जब डिबग का निर्माण कर रहा था-g -O0
मार्टिन यॉर्क

1
@Ayxan जब निर्माण कोड का निर्माण कर रहा है-O3
मार्टिन यॉर्क

1

-pedanticध्वज का उपयोग करना काफी आवश्यक है ।

मैं केवल यह जोड़ना चाहूंगा, कि वर्तमान मानक के साथ कुछ इसी तरह का उपयोग करना उचित है:

-std=c++17 -Wall -Wextra -Werror -Wpedantic -pedantic-errors

कहाँ पे:

  • -std=c++17इसे 2017 में प्रकाशित C ++ मानक के संशोधन का पालन करना बताता है, आप इसके बारे में अधिक पढ़ सकते हैं

  • -Wall इसे बताता है:

    निर्माणों के बारे में सभी चेतावनियों को सक्षम करें जिन्हें कुछ उपयोगकर्ता संदिग्ध मानते हैं, और जो चेतावनी को रोकने के लिए (या चेतावनी को रोकने के लिए) संशोधित करना आसान है, यहां तक ​​कि मैक्रोज़ के संयोजन में, दूसरे शब्दों में चेतावनी के कुछ सेट।

  • -Wextra इसे कुछ और चेतावनियों को सक्षम करने के लिए कहता है, फिर भी सभी नहीं।

  • -Werror इसे सभी चेतावनियों को त्रुटियों में बनाने के लिए कहता है।

  • -Wpedanticया बस -pedanticइसे बताता है:

    सख्त आईएसओ सी और आईएसओ सी ++ द्वारा मांग की गई सभी चेतावनी जारी करें; निषिद्ध एक्सटेंशन का उपयोग करने वाले सभी कार्यक्रमों को अस्वीकार करें, और कुछ अन्य प्रोग्राम जो आईएसओ सी और आईएसओ सी ++ का पालन नहीं करते हैं।

  • -pedantic-errors यह बताता है कि जब भी आधार मानक (देखें -Wpedantic) को एक निदान की आवश्यकता होती है तो एक त्रुटि देनी होगी।


यह सेट आमतौर पर न केवल शुरुआती लोगों के लिए उपयोगी है, क्योंकि वे धीरे-धीरे सीखेंगे प्रत्येक चेतावनी में त्रुटि के परिणामस्वरूप यह संभावित है, लेकिन सामान्य उपयोग के लिए भी।

सभी चेतावनी विकल्पों का विस्तार से वर्णन यहाँ GNU / GCC पृष्ठ पर किया गया है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.