2011-08-23 18 views
66

क्या दृश्य स्टूडियो के साथ एक सीपीपी फ़ाइल में केवल एक चेतावनी लाइन को अक्षम करने का कोई तरीका है?एकल चेतावनी त्रुटि अक्षम करें

उदाहरण के लिए, यदि मैं अपवाद पकड़ता हूं और इसे संभाल नहीं पाता हूं, तो मुझे त्रुटि 4101 (अप्रतिबंधित स्थानीय चर) मिलती है। क्या इस समारोह में इसे अनदेखा करने का कोई तरीका है, लेकिन अन्यथा संकलन इकाई में इसकी रिपोर्ट करें? फिलहाल, मैंने फ़ाइल के शीर्ष पर #pragma warning (disable : 4101) डाला, लेकिन यह स्पष्ट रूप से पूरी इकाई के लिए इसे बंद कर देता है।

+14

यदि आप केवल प्रकार का उल्लेख करते हैं और अपवाद का नाम नहीं देते हैं, तो कोई चेतावनी नहीं होगी। जैसे 'पकड़ो (कॉन्स std :: अपवाद और/* अनामित * /) {....}'। यह आपके प्रश्न का उत्तर नहीं देता है, लेकिन आपकी समस्या का समाधान कर सकता है। – Sjoerd

उत्तर

112
#pragma warning(push) 
#pragma warning(disable : 4101) 
// Your function 
#pragma warning(pop) 
+1

मैं इस काम को भी शामिल करता हूं? – Cookie

+0

@ कुकी: हाँ, यह कोड के किसी भी टुकड़े के लिए काम करता है जो कंपाइलर के माध्यम से जाता है। –

+0

एक हालिया, संक्षिप्त उत्तर के लिए, नीचे डैनियल सेफ का जवाब देखें। –

4

इसके बजाय फ़ाइल (या यहां तक ​​कि एक हेडर फाइल) के शीर्ष पर डालने के लिए, केवल विचाराधीन कोड #pragma warning (push), #pragma warning (disable) और एक मिलान #pragma warning (pop) साथ, दिखाया गया है here लपेट दें।

हालांकि #pramga warning (once) सहित कुछ अन्य विकल्प हैं।

9

उपयोग #pragma warning (push), तो #pragma warning (disable), तो अपने कोड में कहें, तो #pragma warning (pop) वर्णित here के रूप में उपयोग:

#pragma warning(push) 
#pragma warning(disable : WarningCode) 
// code with warning 
#pragma warning(pop) 
22

#pragma धक्का/पॉप अक्सर समस्याओं के इस प्रकार के लिए एक समाधान कर रहे हैं, लेकिन इस मामले में आप केवल संदर्भित चर को क्यों नहीं हटाते?

try 
{ 
    // ... 
} 
catch(const your_exception_type &) // type specified but no variable declared 
{ 
    // ... 
} 
+4

यह प्रश्न के लिए एक अभिशाप नहीं है। अनुमोदित, यह ओपी की समस्या का समाधान कर सकता है, लेकिन भविष्य के पाठकों को एक समान प्रश्न के साथ मदद नहीं करेगा: "मैं अपने कोड के एक विशिष्ट भाग के लिए एक विशिष्ट चेतावनी कैसे बंद करूं?" – Sjoerd

+0

@Sjoerd: तीन लोगों ने पहले से ही" आधिकारिक प्रश्न "का उत्तर दिया है कि अन्य लोग खोज सकते हैं, इसलिए इसके बजाय मैंने लाइनों के बीच पढ़ने और अपनी वास्तविक समस्या को हल करने की कोशिश की (आपकी टिप्पणी के बाद एक मिनट तक पहुंचे ': –

+6

@Sjoerd भविष्य के पाठक के रूप में मैं प्रमाणित करता हूं कि वास्तव में इस जवाब ने मेरी मदद की है। –

1

आप कुछ हैडर

template<class T> 
void ignore (const T &) {} 

में unreferenced local variable लिखने को निष्क्रिय और प्रयोग

catch(const Except & excpt) { 
    ignore(excpt); // No warning 
    // ... 
} 
+2

केवल एक चेतावनी दबाए जाने के लिए एक फंक्शन कॉल? आप ऐसा क्यों नहीं करते इसके बदले: '(शून्य) अप्रयुक्त वार;'? – Nawaz

+0

@ नवाज: मुझे लगता है कि '(शून्य) अप्रयुक्त वार;? 'सी ++ मानक अनुरूप नहीं है। –

+0

किसने कहा? कोई संदर्भ? – Nawaz

4

एक भी UNREFERENCED_PARAMETERWinNT.H में परिभाषित का उपयोग कर सकते हैं। परिभाषा सिर्फ है:

#define UNREFERENCED_PARAMETER(P)   (P) 

और यह पसंद का उपयोग करें:

void OnMessage(WPARAM wParam, LPARAM lParam) 
{ 
    UNREFERENCED_PARAMETER(wParam); 
    UNREFERENCED_PARAMETER(lParam); 
} 

आप इसका उपयोग क्यों होता है, आप तर्क कर सकता है कि आप बस चर नाम ही मिटा सकते हैं। खैर, ऐसे मामले हैं (विभिन्न परियोजना विन्यास, डीबग/रिलीज बिल्ड) जहां चर का उपयोग वास्तव में किया जा सकता है। एक अन्य कॉन्फ़िगरेशन में वेरिएबल अप्रयुक्त है (और इसलिए चेतावनी)।

कुछ स्थिर कोड विश्लेषण अभी भी इस गैर-गैर-मूलभूत कथन (wParam;) के लिए चेतावनी दे सकता है। उस स्थिति में, आप DBG_UNREFERENCED_PARAMETER का उपयोग कर सकते हैं जो डिबग बिल्ड में UNREFERENCED_PARAMETER जैसा है, और रिलीज निर्माण में P=P करता है।

#define DBG_UNREFERENCED_PARAMETER(P)  (P) = (P) 
2

कुछ स्थितियों में आप नामांकित पैरामीटर होना आवश्यक है लेकिन आप इसे सीधे उपयोग नहीं करते।
उदाहरण के लिए, मैं इसे VS2010 पर चला गया, जब 'ई' का उपयोग केवल decltype कथन के अंदर किया जाता है, तो संकलक शिकायत करता है लेकिन आपके पास नामित विविध e होना चाहिए।

bool f(int e) 
{ 
    // code not using e 
    return true; 
    e; // use without doing anything 
} 
+0

अब (एमएस वीएस2015 कंपाइलर में) इसका कारण सी 4702 पहुंच योग्य कोड – dlatikay

43

आप केवल कोड की एक पंक्ति में एक चेतावनी को दबाने के लिए चाहते हैं, आप suppresswarning specifier उपयोग कर सकते हैं:

उपरोक्त सभी गैर #pragma सुझाव सब बस एक ही बयान जोड़ने के लिए नीचे उबाल:

#pragma warning(push) 
#pragma warning(disable: 4101) 
// here goes your code where the warning occurs 
#pragma warning(pop) 
:

#pragma warning(suppress: 4101) 
// here goes your single line of code where the warning occurs 

कोड की एक पंक्ति के लिए, यह निम्न लिखित रूप के रूप में ही काम करता है

+6

बहुत उपयोगी है! दुर्भाग्यवश, यह एक पंक्ति के लिए काम नहीं करता है जिसमें एक शीर्षलेख शामिल होता है जो चेतावनी उत्पन्न करता है। –

+1

@ मार्कोपोपिक: 'दप्रेस' विनिर्देशक एकल, ** पूर्व-संसाधित ** कोड कोड पर चलता है। यदि '#pragma चेतावनी (suppress: ...)' के बाद वाली रेखा ''# शामिल' निर्देश है (जो वर्तमान पैरालेशन इकाई में इसके पैरामीटर द्वारा संदर्भित फ़ाइल का विस्तार करती है), तो प्रभाव केवल उस फ़ाइल की पहली पंक्ति पर लागू होता है । यह स्पष्ट होना चाहिए, क्योंकि संकलक द्वारा चेतावनियां उत्पन्न होती हैं। संकलक पूर्व-संसाधित कोड पर काम करता है। – IInspectable

1

उदाहरण:

#pragma warning(suppress:0000) // (suppress one error in the next line) 

यह pragma सी ++ दृश्य स्टूडियो के साथ शुरू के लिए मान्य है 2005.
https://msdn.microsoft.com/en-us/library/2c8f766e(v=vs.80).aspx

pragma विजुअल स्टूडियो 2015 तक के सी # विजुअल स्टूडियो 2005 के माध्यम से लिए मान्य नहीं है
त्रुटि: "अपेक्षित अक्षम या पुनर्स्थापित करें"।
(मुझे लगता है कि वे कभी नहीं suppress को लागू करने के लिए चारों ओर हो गया ...)
https://msdn.microsoft.com/en-us/library/441722ys(v=vs.140).aspx

सी # एक अलग स्वरूप की जरूरत है। यह इस प्रकार दिखाई देगा (लेकिन काम नहीं):

#pragma warning suppress 0642 // (suppress one error in the next line) 

के बजाय suppress, आप disable और enable करने के लिए है:

if (condition) 
#pragma warning disable 0642 
    ; // Empty statement HERE provokes Warning: "Possible mistaken empty statement" (CS0642) 
#pragma warning restore 0642 
else 

कि इतने बदसूरत है, मुझे लगता है कि होशियार है तो बस फिर से इसे स्टाइल करें:

if (condition) 
{ 
    // Do nothing (because blah blah blah). 
} 
else 
संबंधित मुद्दे