2009-01-24 13 views
22

मैं जीसीसी से इस चेतावनी मिलती है:एक gcc चेतावनी एक त्रुटि बनाओ?

warning: cannot pass objects of non-POD type 'class Something' through '...'; call will abort at runtime

यह विशेष रूप से, क्योंकि यह एक बीच में बंद करें कॉल बहुत घातक है,। यह एक त्रुटि क्यों नहीं है? मैं इसे एक त्रुटि बनाना चाहता हूं, लेकिन:

  1. मैं एक विशिष्ट चेतावनी को एक त्रुटि कैसे बना सकता हूं?
  2. कौन सा चेतावनी है? http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html के अनुसार, -Wno-invalid-offsetof झंडा इसे छिपाने के लिए की तरह लग रहा है, लेकिन यह
+3

सौभाग्य से, जीसीसी (कम से कम 4.6.3, लेकिन शायद पहले) के आधुनिक संस्करण आपको बताते हैं कि कौन सा चेतावनी झंडा एक विशेष चेतावनी को ट्रिगर करता है। उदाहरण के लिए: 'main.cpp: 12: 15: त्रुटि: शून्य से विभाजन [-Werror = div-by-zero]' –

+0

और यह सिर्फ इतना ही शानदार विशेषता है। – hlovdal

उत्तर

22

मुझे यकीन है कि क्या सही चेतावनी है नहीं कर रहा हूँ, लेकिन एक बार आप इसे मिल गया है, आप इसके साथ स्वभाव है बदल सकते हैं नहीं है निम्नलिखित (का उपयोग कर उदाहरण के रूप में 'प्रारूप'):

gcc -Werror=format ... 

संपादित करें:: मैं बस देख लिया है जीसीसी स्रोत

#pragma GCC diagnostic error "-Wformat" 

या strager बताते हैं इसके लिए और कमांड लाइन झंडे के माध्यम से इस विशिष्ट चेतावनी को अक्षम नहीं किया जा सकता है।

3

आप सभी या कुछ चेतावनियों को त्रुटियों में बदलने के लिए -Werror कंपाइलर ध्वज का उपयोग कर सकते हैं।

6

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

+0

आमेन, आपका कोड कम-से-कम के साथ चेतावनी मुक्त होना चाहिए (हालांकि कुछ चीजें जो -क्स्ट्रा रिपोर्ट्स एक्साइसेबल हैं, उदाहरण के लिए अप्रयुक्त चर/पैरामीटर)। –

+1

आप कर सकते हैं -Wall -Wextra -Wno-unused-packages -Wno-unused-functions ... किसी भी विशिष्ट चेतावनी को -Wno- $ foo वाक्यविन्यास से अक्षम किया जा सकता है, जो विनिर्देशों को क्षमा करना आसान बनाता है। दुर्भाग्य से, यह द्विपक्षीय चेतावनियों के किसी भी सबसेट के साथ मदद नहीं करता है। – Tom

+0

चेतावनी त्रुटियों को "निश्चित" नहीं है। और चेतावनी मुक्त कोड एक छिपी अवधारणा है, जब तक कि आप कंपाइलर संस्करण को ठीक न करें। यह भी देखें [टिडबिट्स: ईश्वर के प्यार के लिए, उपयोग न करें - वाइर!] (Http://blog.schmorp.de/2016-02-27-tidbits-for-the-love-of-god-dont- का उपयोग-werror.html)। – Ruslan

10

-Werror=specific-warning निर्दिष्ट -Wspecific-warning को जीसीसी 4.3.x या नए में एक त्रुटि में बदल देगा। 4.1.2 में, केवल -Werror-implicit-function-declaration काम करता है। बराबर चिह्न के बजाय हाइफ़न पर ध्यान दें - यह केवल उस विशिष्ट मामले के लिए काम करता है और कोई अन्य नहीं। यह अधिक गंभीर सामान्य चेतावनियों में से एक है और यह निश्चित रूप से एक त्रुटि में इसे आसान बनाने के लिए आसान है।

इसके अलावा, जीसीसी के पुराने संस्करण केवल -Werror स्लेजहैमर प्रदान करते हैं जो हर अंतिम चेतावनी को त्रुटि प्रदान करते हैं।

2

आप -wdiagnostics-show-option का उपयोग कर सकते हैं -W विकल्प जो किसी विशेष चेतावनी पर लागू होता है।

दुर्भाग्यवश, इस मामले में उस चेतावनी को शामिल करने वाला कोई विशिष्ट विकल्प नहीं है।

ऐसा प्रतीत होता है कि जीसीसी-4.5 में इसके लिए बेहतर समर्थन होगा।

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