दिलचस्प पोस्ट
org.hibernate.LazyInitializationException – प्रॉक्सी प्रारंभ नहीं कर सका – कोई सत्र नहीं प्रकार के अनुसार WPF विंडो में सभी नियंत्रण खोजें एक्सपांडो ओब्जेक्ट में अज्ञात (डिजाइन समय पर) गुण जोड़ना शेल स्क्रिप्ट में किसी अन्य स्ट्रिंग के लिए एक उपस्ट्रिंग बदलें अंगुलुज मल्टीपार्ट फॉर्म डेटा और एक फाइल कैसे अपलोड करें? एक्सटेंशन विधि से अपवाद या NullReferenceException? Iostream.h कहां प्राप्त करें सरणियों के वेक्टर के साथ काम करने का सही तरीका कैसे नेस्टेड शब्दकोशों को सुंदर प्रिंट करने के लिए? डेटा-आईडी विशेषता कैसे प्राप्त करें? दो क्षेत्रों की तुलना करने के लिए कस्टम फॉर्म सत्यापन निर्देश जावास्क्रिप्ट के द्वारा सीएसएस छद्म-तत्व शैलियों को बदलना यूटीएफ -8 बाइट स्ट्रिंग को कैसे परिवर्तित करें? मैं ऐप पूल को कैसे क्रैश कर सकता हूं? विधि हस्ताक्षर में नया कीवर्ड

_DEBUG बनाम NDEBUG

कोड का डिबग अनुभाग निर्दिष्ट करने के लिए कौन सा प्रीप्रोसेसर परिभाषित किया जाना चाहिए?

#ifndef NDEBUG या #ifndef NDEBUG उपयोग करें या ऐसा करने का एक बेहतर तरीका है, जैसे #define MY_DEBUG ?

मुझे लगता है कि _DEBUG विजुअल स्टूडियो विशिष्ट है, NDEBUG मानक है?

वेब के समाधान से एकत्रित समाधान "_DEBUG बनाम NDEBUG"

जब आप /MTd या /MDd विकल्प निर्दिष्ट करते हैं तो विजुअल स्टूडियो NDEBUG को NDEBUG करता है, NDEBUG मानक-सी दावे को अक्षम करता है जब उपयुक्त हो, तो _DEBUG प्रयोग करें, यदि आप चाहते हैं कि आपका डीबगिंग कोड एमएस सीआरटी डीबगिंग तकनीक और NDEBUG अनुरूप हो, तो आप assert() साथ रहना चाहते assert()

यदि आप अपने डीबगिंग मैक्रोज़ को परिभाषित करते हैं (और आप कंपाइलर या सी रनटाइम हैक नहीं करते हैं), अंडरस्कोर के साथ शुरुआती नामों से बचें, क्योंकि ये आरक्षित हैं

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

_DEBUG जैसे कुछ पर भरोसा करने के लिए एक विशेष संकलक और पुस्तकालय कार्यान्वयन के कार्यान्वयन के विवरण पर भरोसा करना होगा। अन्य कंपाइलर एक ही सम्मेलन को चुन सकते हैं या नहीं।

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

इन विकल्पों में से किसी के साथ, यदि आप अपने प्रोजेक्ट के हिस्से के रूप में तीसरे पक्ष के कोड का उपयोग करते हैं, तो आपको यह जानना होगा कि यह किस कन्वेंशन का उपयोग करता है

क्या NDEBUG मानक है?

हाँ, यह C89, C99, C + + 98, C ++ 2003, C ++ 2011, C ++ 2014 मानकों के लिए अर्थ "नहीं डीबग" के साथ एक मानक मैक्रो है। मानकों में कोई _DEBUG मैक्रोज़ नहीं हैं _DEBUG

सी ++ 2003 मानक मानक सी को "पृष्ठ 326" पर "17.4.2.1 हेडर" पर पाठक भेजें।

यह NDEBUG समान है क्योंकि यह मानक सी लाइब्रेरी के समान है I

सी 8 9 (सी प्रोग्रामर ने इस मानक को मानक सी के रूप में कहा था) "4.2 डिज़ाइनस्टिक्स" खंड में कहा गया था

http://port70.net/~nsz/c/c89/c89-draft.html

यदि NDEBUG को स्रोत फ़ाइल में बिंदु पर एक मैक्रो नाम के रूप में परिभाषित किया गया है, जिसमें बताया गया है कि मैक्रो को परिभाषित किया गया है

  #define assert(ignore) ((void)0) 

यदि विजुअल स्टूडियो https://msdn.microsoft.com/en-us/library/b0084kay.aspx में _DEBUG मैक्रोज़ के अर्थ को देखो तो यह देखा जाएगा, कि यह मैक्रो स्वचालित रूप से भाषा रनटाइम लाइब्रेरी संस्करण के अपने द्वारा परिभाषित है ।

मैक्रो NDEBUG नियंत्रित करता है कि क्या () बयान सक्रिय हैं या नहीं।

मेरे विचार में, यह किसी भी अन्य डिबगिंग से अलग है – इसलिए मैं प्रोग्राम में डीबगिंग सूचना को नियंत्रित करने के लिए NDEBUG के अलावा किसी अन्य का उपयोग करता हूं। मैं किस प्रकार उपयोग करता हूँ, इसके साथ मैं काम कर रहा हूँ; विभिन्न सिस्टम मैक्रोज़ सक्षम करने के लिए अलग-अलग हैं, और मैं जो कुछ भी उपयुक्त है उसका उपयोग करता हूं।

यदि कोई ढांचा नहीं है, तो मैं एक प्रमुख अंडरस्कोर के बिना एक नाम का उपयोग करता हूं; वे 'कार्यान्वयन' के लिए आरक्षित होते हैं और मैं नाम collsions के साथ समस्याओं से बचने की कोशिश करते हैं – दोगुना इसलिए जब नाम एक मैक्रो है

सुसंगत रहें और कोई फर्क नहीं पड़ता जो एक इसके अलावा यदि किसी कारण से आपको किसी अन्य प्रोग्राम या किसी निश्चित डेबू पहचानकर्ता का उपयोग करने वाले उपकरण के साथ इंटरपोट करना होगा, तो ऐसा करना आसान है

 #ifdef THEIRDEBUG #define MYDEBUG #endif //and vice-versa 

दुर्भाग्य से "डेबग" भारी मात्रा में ओवरलोड हो गया है। उदाहरण के लिए, यह अनुशंसा की जाती है कि हमेशा रिलीज़ बिल्ड के लिए एक पीडीबी फ़ाइल जेनरेट करें और सहेज लें। जिसका अर्थ है- Zx झंडे में से एक है, और -DEBUG लिंकर विकल्प। जबकि _DEBUG रनटाइम लाइब्रेरी के विशेष डीबग संस्करणों से संबंधित है जैसे कि कॉल malloc और निःशुल्क। तब NDEBUG दावे को अक्षम करेगा