2010-02-08 8 views
30

मेरे पास एक ऐसा प्रोग्राम है जिसे केवल DEBUG मोड में संकलित किया जाना चाहिए। (परीक्षण उद्देश्य)सी प्रीप्रोसेसर में त्रुटि या चेतावनी कैसे उत्पन्न करूं?

मैं प्रीप्रोसेसर रिलेज़ मोड में संकलन को कैसे रोक सकता हूं?

उत्तर

50

कहीं भी स्थान:

#ifndef DEBUG 
#error Only Debug builds are supported 
#endif 
3

आप बस एक त्रुटि रिपोर्ट करना चाहते हैं:

#ifdef RELEASE 
    #error Release mode not allowed 
#endif 

सबसे compilers के साथ काम करेंगे।

4

आप इसके लिए error निर्देश का उपयोग कर सकते हैं। निम्नलिखित कोड संकलन समय पर एक त्रुटि फेंक देंगे अगर DEBUG परिभाषित नहीं है:

#ifndef DEBUG 
#error This is an error message 
#endif 
+0

क्षमा करें, मैं pragma और त्रुटि मिश्रण लिखते समय। उत्तर में सुधार –

13

सी एक #error बयान प्रदान करते हैं और सबसे compilers एक #warning बयान जोड़ें। संदेश उद्धृत करने के लिए The gcc documentation recommends

+1

@ एंटोनियो राइट, वहां कोई और [सिफारिश] नहीं है। मैंने लिंक को एक से जीसीसी दस्तावेज़ में बदल दिया। – philant

6

शायद कुछ और अधिक परिष्कृत, लेकिन यह केवल पिछले समाधानों के पेस्ट & प्रतिलिपि है। :-)

#ifdef DEBUG   
    #pragma message ("Debug configuration - OK") 
#elif RELEASE 
    #error "Release configuration - WRONG" 
#else 
    #error "Unknown configuration - DEFINITELY WRONG" 
#endif 

पीएस चेतावनी उत्पन्न करने का एक तरीका भी है। तरह

HereIsMyWarning: 

unreferenced Labe बनाएँ और इसे संदर्भ नहीं है।

#if ! DEBUG 
#define FIX_FOR_RELEASE(statement) _Pragma ("GCC error \"Must be fixed for release version\"") 
#else 
#define FIX_FOR_RELEASE(statement) statement 
#endif 

आप अस्थायी हैक्स के लिए इस मैक्रो का उपयोग कर सकते हैं: संकलन के दौरान आप की तरह

1>..\Example.c(71) : warning C4102: 'HereIsMyWarning' : unreferenced label 
1

जीसीसी और बजना (और शायद किसी भी संकलक कि _Pragma सुविधा का समर्थन) आप मैक्रो निर्धारित कर सकते हैं के लिए चेतावनी हो जाएगी , उदाहरण के लिए, एक सह-कार्यकर्ता अभी तक नहीं लिखा है, यह सुनिश्चित करने के लिए कि आप जनता को एक बिल्ड जारी करना चाहते हैं, तो आप इसे ठीक करना भूल नहीं सकते हैं। या तो

FIX_FOR_RELEASE() 
// Code that must be removed or fixed before you can release 

या

FIX_FOR_RELEASE(statement that must be removed or fixed before you can release); 
1

कोड :: ब्लाकों में, आप रिलीज मोड नहीं करना चाहते हैं, तो आप रिलीज मोड हटा सकते हैं। ऐसा करने के लिए, प्रोजेक्ट मेनू पर क्लिक करें, गुण चुनें ..., और बिल्ड लक्ष्य टैब में आप रिलीज पर क्लिक कर सकते हैं और फिर हटाएं बटन पर क्लिक कर सकते हैं। रिलीज मोड को हटाने से यह केवल वर्तमान प्रोजेक्ट के लिए होता है, ताकि आप इसे अन्य परियोजनाओं में अभी भी उपयोग कर सकें।

अन्यथा, आप वास्तव में पूर्वप्रक्रमक उपयोग करना चाहते हैं, तो आप ऐसा कर सकते हैं:

#ifdef RELEASE 
#error "You have to use the Debug mode" 
#endif 
संबंधित मुद्दे