2009-05-29 16 views
14

कोड का यह टुकड़ा हटानेचुनिंदा चेतावनी संदेश जीसीसी

jpegthread.c:157: warning: format '%x' expects type 'unsigned int', but argument 3 has type 'Int32' 

मैं जानता हूँ कि मैं प्रकार कास्टिंग द्वारा यह से छुटकारा पा सकते हैं, लेकिन यह संभव है उस विशेष प्रकार की चेतावनी से छुटकारा पाने के लिए जीसीसी कंपाइलर ध्वज के साथ, और अभी भी -Wall का उपयोग करें?

+0

क्या आप शायद वास्तव में क्या करना चाहिए' ' और उसके बाद' printf शामिल है। –

+0

यदि आप कर सकते हैं, तो भी नया कोड लिखने पर, '' से मानक 'intX_t' प्रकारों का उपयोग करने का प्रयास करें, कोई भी पढ़ रहा है। –

उत्तर

8

मैं निम्नलिखित CFLAGS इस्तेमाल किया ठीक:

-Wall -Wformat=0 
+0

कभी वास्तव में आवश्यकता थी, लेकिन मैं इसे काम किया जा रहा है देख सकते हैं :) –

3

मुझे लगता है आप

#ifdef WIN32 
#pragma warning (disable: #num of the warning) 
#endif 

जीसीसी में समतुल्य लिए देख रहे हैं ....

आप इस तरह के -Wno-रूपांतरण -Wno प्रारूप-सुरक्षा है कि के रूप में विकल्प के लिए खोज कर सकते हैं नौकरी यहां

http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Warning-Options.html

लेकिन #pragma निर्देश के संदर्भ में:

मैं गूगल से जीसीसी मेलिंग सूची से उद्धरण:

जीसीसी नहीं, वर्तमान में, #pragma सुविधा आप देख रहे हैं प्रदान करता है।

आशा खोना मत! व्यवहार्य विकल्प हैं।

कोड को ठीक करने का पहला सबसे अच्छा तरीका यह अब चेतावनी को उत्सर्जित नहीं करता है। हां, आपने कहा है कि आप ऐसा नहीं कर सकते हैं। :-(

नोट:! चेतावनी वर्बोज़ के रूप में अपनी टीम बर्दाश्त कर सकते हैं के रूप में बदल गया है अवांछित चेतावनी को अनदेखा करने के लिए अगले सबसे अच्छा तरीका [नीचे देखें]

प्रक्रिया पोस्ट करने के लिए है के उत्पादन जीसीसी (जैसे एक पर्ल स्क्रिप्ट के रूप में) एक स्क्रिप्ट के लिए बाहर स्ट्रिप्स कि विशिष्ट, सटीक के लिए चेतावनी निष्क्रिय करने के लिए चेतावनी आप चाहते हैं अनदेखी करने के लिए।

अवांछित चेतावनी को अनदेखा करने के लिए अगले तरीका है वह अनुवाद इकाई। -Wno-foozle-mcgoogle, बस उस विशेष अनुवाद इकाई के लिए। यह शक्तिशाली बड़े हथौड़ा है, हालांकि। और अगर चेतावनी एक हेडर फाइल में है, यह व्यापक हो सकता है अपने पूरे परियोजना भर - जो करने के लिए मैं पोस्ट-प्रोसेसिंग स्क्रिप्ट समाधान (यह मानते हुए आप कोड फिक्सिंग से अस्वीकृत कर दी जाती) को निर्देशित करता हूँ ।

तो वर्तमान में नहीं, विशिष्ट चेतावनियों को अक्षम करने के लिए कोई #pragma निर्देश नहीं है। उपयोग करने के बजाय -वैसे आप कई चेतावनियां चालू कर सकते हैं क्योंकि आप विशिष्ट लोगों को घटा सकते हैं।

http://www.network-theory.co.uk/docs/gccintro/gccintro_31.html

या कोड

+0

जीसीसी पुस्तिका के अनुसार गलत: http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html –

+0

"या कोड को ठीक" +1 –

42

आप पोर्टेबल काम करने के लिए है कि कोड की जरूरत है तो आप अहस्ताक्षरित int करने के लिए तर्क डाली चाहिए, क्योंकि कुछ प्लेटफार्मों पर इंट 32 की तुलना में इंट टाइप का अलग आकार हो सकता है।

जीसीसी में विशिष्ट चेतावनी अक्षम करने के बारे आपके प्रश्न का उत्तर के लिए, आपको -Wxxxx साथ जीसीसी में विशिष्ट चेतावनी सक्षम और उन्हें -Wno-xxxx साथ निष्क्रिय कर सकते हैं।

GCC Warning Options से:

आप विकल्पों -W शुरुआत निहित घोषणाओं पर चेतावनी अनुरोध करने के लिए उदाहरण के लिए -Wimplicit, के साथ कई विशिष्ट चेतावनी अनुरोध कर सकते हैं। चेतावनियों को बंद करने के लिए इनमें से प्रत्येक विशिष्ट चेतावनी विकल्प में -Wno- से एक नकारात्मक रूप भी है; उदाहरण के लिए, -Wno-implicit। यह मैनुअल केवल दो रूपों में से एक सूचीबद्ध करता है, जो भी डिफ़ॉल्ट नहीं है।

अपने मामले के लिए प्रश्न में चेतावनी -Wformat

-Wformat
चेक लगता है कि तर्क की आपूर्ति की प्रारूप स्ट्रिंग के लिए उपयुक्त प्रकार है बनाने के लिए printf और scanf, आदि, करने के लिए कहता है निर्दिष्ट, और प्रारूप स्ट्रिंग में निर्दिष्ट रूपांतरण समझ में आता है। इसमें मानक फ़ंक्शंस और अन्य प्रारूप प्रारूप (फंक्शन एट्रिब्यूट्स देखें) द्वारा निर्दिष्ट प्रिंटफ, स्कैनफ़, स्ट्रैटाइम और स्ट्रफ़ोन (एक एक्स/ओपन एक्सटेंशन, सी मानक में नहीं) परिवारों (या अन्य लक्ष्य-विशिष्ट परिवार) में निर्दिष्ट हैं। निर्दिष्ट किए गए स्वरूप विशेषताओं के बिना कौन से फ़ंक्शंस चेक किए गए हैं, चयनित मानक संस्करण पर निर्भर करता है, और निर्दिष्ट विशेषता के बिना फ़ंक्शंस के ऐसे चेक -ffreestanding या -fno-builtin द्वारा अक्षम किए जाते हैं।

प्रारूपों को जीएनयू libc संस्करण 2.2 द्वारा समर्थित प्रारूप सुविधाओं के विरुद्ध चेक किया गया है। इनमें सभी आईएसओ सी 9 0 और सी 99 फीचर्स, साथ ही साथ सिंगल यूनिक्स स्पेसिफिकेशन और कुछ बीएसडी और जीएनयू एक्सटेंशन शामिल हैं। अन्य लाइब्रेरी कार्यान्वयन इन सभी सुविधाओं का समर्थन नहीं कर सकता है; जीसीसी किसी विशेष पुस्तकालय की सीमाओं से परे सुविधाओं के बारे में चेतावनी का समर्थन नहीं करता है। हालांकि, -pedantic का उपयोग -Wformat के साथ किया जाता है, तो चयनित मानक संस्करण में नहीं प्रारूप प्रारूपों के बारे में चेतावनियां दी जाएंगी (लेकिन स्ट्रफ़ोन प्रारूपों के लिए नहीं, क्योंकि वे सी मानक के किसी भी संस्करण में नहीं हैं)। सी डायलेक्ट नियंत्रित करने वाले विकल्प देखें।

+0

प्रश्न का उत्तर नहीं देता है: कैसे एक सामान्य चेतावनी को सामान्य रूप से अक्षम कर सकता है -वॉल बंद किए बिना -वॉल? या यह असंभव है? –

+0

@AaronCampbell: '-Wall -Wno-format'' -Wall' द्वारा प्रारूप चेतावनियों को बंद कर देता है। –

19

ऐसा लगता है कि जीसीसी मैनुअल वास्तव में #pragma के साथ ऐसा करने का एक तरीका प्रदान करता है। (विपरीत करने के लिए क्या Aiden बेल एक और उत्तर यहाँ में कहते हैं)

http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html

उदा - प्रारंभिक चेतावनी के लिए, आप कर सकते हैं ...

#pragma GCC diagnostic ignored "-Wuninitialized" 

... चेतावनी को दबाने के लिए, या ...

#pragma GCC diagnostic warning "-Wuninitialized" 

... एक चेतावनी (नहीं एक त्रुटि) आप -Werror साथ निर्माण कर रहे हैं, भले ही के रूप में यह इलाज के लिए। (: PRIx32, स्थिति "% स्थिति") `, और भी अहस्ताक्षरित पूर्णांक में बदलने का पहला

+2

शायद लिखने के समय यह नहीं था। मैं 4.1.2 मैनुअल देख रहा हूं, और इसमें इसका समर्थन नहीं है। – mjs

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