मानक सी जोर मैक्रो अक्षम है जब मैक्रो NDEBUG
परिभाषित किया गया है, जिसका अर्थ है "डीबग नहीं"। यह #ifndef NDEBUG //DebuggingCode #endif
जैसे वास्तव में भयानक डबल नकारात्मक मामलों की ओर जाता है। ऐसा लगता है कि रिलीज शर्तों की बेहतर पसंद होगी, लेकिन मुझे विश्वास नहीं है कि मानकों की समिति ने ऐसा करने के किसी कारण के बिना ऐसा किया होगा ....रिलीज के बजाय एनडीईबीयूजी क्यों?
उत्तर
मैक्रो रिलीज होने का मतलब है कि कोड वितरण के लिए तैयार है - जब यह नहीं हो सकता है। दूसरी तरफ एनडीईबीयूजी का तात्पर्य है कि डिबगिंग पूर्ण है, इसलिए परीक्षण के लिए तैयार है।
मुझे यह भी लगता है कि चीज़ों को बंद करना बेहतर है यह सुनिश्चित करने के लिए कि आपने सब कुछ चालू कर दिया है। यही कारण है कि अधिकांश ओएस (उदाहरण के लिए) ज्यादातर चीज़ों पर स्विच किया जाता है जब बहुत से लोगों को इसकी आवश्यकता नहीं होती है।
बस मेरे विनम्र विचार।
मैक्रो NDEBUG
नियंत्रित करता है कि कैसे assert
व्यवहार करते हैं।
आपको आमतौर पर इसे किसी अन्य चीज़ के लिए उपयोग नहीं करना चाहिए। यदि आप इसे अन्य चीजों के लिए उपयोग करेंगे, जैसे कि अतिरिक्त डीबग ट्रेस आउटपुट, आपके पास इस अतिरिक्त कोड के बिना अपना एप्लिकेशन बनाने का विकल्प नहीं है लेकिन दावे सक्षम हैं।
मैं अनुशंसा करता हूं कि आप अपना खुद का प्रीप्रोसेसर प्रतीक परिभाषित करें, MY_TRACE कहें, और इसका उपयोग करें। इसके अलावा, इसे 0
या 1
पर परिभाषित करें और #if MY_TRACE
का उपयोग करें। इस तरह आप प्रीप्रोसेसर अभिव्यक्ति में एक अनियमित चर का उपयोग करते समय चेतावनी जारी करने के लिए अपने कंपाइलर को कॉन्फ़िगर करने के लिए सही ढंग से प्रारंभ किए बिना प्रतीक का उपयोग करके फ़ाइलों को पकड़ सकते हैं।
मुझे इसका उपयोग किसी और चीज़ के लिए क्यों नहीं करना चाहिए? –
ठीक है, अगर आप इसे किसी अन्य चीज़ के लिए उपयोग नहीं करते हैं लेकिन 'जोर' को नियंत्रित करते हैं, तो आपको कभी भी '#ifndef NDEBUG' लिखने की आवश्यकता नहीं होगी। – Lindydancer
क्या होता है जब आपको दुर्लभ हार्ड-टू-रीप्रोडस बग को ट्रैक करने के लिए 'जोरदार सक्षम' छोड़ने की आवश्यकता होती है, लेकिन नहीं चाहते कि हजारों लाइनों को डीबग आउटपुट को जगह पर फेंक दिया जाए? –
मेरा मानना है कि नहीं कर सकते मानक समिति होगा ऐसा करने के लिए किसी कारण के बिना [
assert()
को नियंत्रित करने के नाम NDEBUG उपयोग के लिए चुना] है ....
मैं केवल अनुमान लगा सकते हैं, लेकिन मैं संदेह है कि मैक्रोज़ पर काम करने के तरीके को नियंत्रित करने के लिए पूर्व-मानक कई कार्यान्वयनों द्वारा उपयोग किए जाने वाले कई अलग-अलग नाम हो सकते हैं, और समिति ने संभवतः 'तटस्थ' नाम चुनने का निर्णय लिया जो कुछ असंबद्ध कारणों के लिए मौजूदा कोड में उपयोग की जाने वाली कुछ संभावना नहीं थी । मुझे लगता है कि RELEASE
के लिए कोड के उचित बिट में मैक्रो के रूप में उपयोग करने के लिए यह आम बात हो सकती है, इसलिए assert()
मैक्रो को नियंत्रित करने के लिए उस नाम (या DEBUG
) का उपयोग करके विवाद हो सकता है (विशेष रूप से उन उपयोगकर्ताओं के लिए जो ठीक नियंत्रण चाहते हैं दावा, उन्हें केवल कोड के हिस्सों के लिए बदलना)।
लंबी अवधि के एफिल उपयोगकर्ता के रूप में मैं आपको बता सकता हूं कि इसे किसी अन्य तरीके से डीबग/नोडबग में उपयोग किया जाता है। जैसा कि इंगित किया गया है कि केवल एक ही प्रभाव है जोरदार बयान को अक्षम करना। जोर देने का उद्देश्य प्री-और पोस्टकंडिशन चेक जोड़ना है। इसका उपयोग करने की सिफारिश की जाती है, और यह आपके प्रोग्राम के प्रदर्शन को 10 या उससे अधिक कारकों से धीमा कर सकता है। इसे अनुबंध द्वारा डिजाइन (गरीब पुरुषों) कहा जाता है।
एनडीईबीयूजी का उपयोग करते समय इसका मतलब यह नहीं है कि आप डिबगिंग के साथ समाप्त हो गए हैं, बस यह भारी डीबगिंग उपकरण हटा दिया गया है।
लोकप्रिय डीबग/रिलीज दुर्भाग्यवश व्यावहारिक विकास में सबसे अच्छा मामला नहीं है जहां आपने अच्छे कारणों से अल्फा, बीटा, रिलीज रिलीज मॉडल का सामना किया है।
अल्फा सॉफ़्टवेयर में इतना गड़बड़ है कि आप इसे एनडीईबीयूजी और डीबगर प्रतीकों के बिना संकलित करते हैं। बीटा एनडीईबीयूजी सेट और डीबगर प्रतीकों (और शायद पहले से ही ऑप्टिमाइज़ेशन स्विच के साथ) के साथ संकलित है और अंतिम रिलीज को एनडीईबीयूजी और पूर्ण अनुकूलन के साथ संकलित किया जाता है।
- 1. मुझे क्यों लिखना चाहिए [anView रिलीज], anView = nil; [anView रिलीज] के बजाय ;?
- 2. मैवेन रिलीज के बजाय स्नैपशॉट पर तैनात है
- 3. जीसीसी एनडीईबीयूजी को कब परिभाषित करता है?
- 4. फ्लोट के बजाय फ्लोटबफर क्यों []?
- 5. रिलीज उत्पन्न .pdb फ़ाइलें, क्यों?
- 6. रिलीज में qDebug काम क्यों करता है?
- 7. क्यों NSAssert1, आदि NSAssert के बजाय?
- 8. क्यों cout के बजाय std :: cout?
- 9. टेस्ट क्लास के बजाय testFixture क्यों?
- 10. सिर्फ पैटर्न मिलान के बजाय टाइपक्लास क्यों?
- 11. जावा enum - क्यों उपयोग toString के बजाय नाम
- 12. सामान्य रिलीज बनाम रखरखाव रिलीज पर नीति?
- 13. CompositionTarget.Rendering RenderingEventArgs के बजाय EventArgs क्यों लेता है?
- 14. (। *) के बजाय (। *?)
- 15. डेल्फी में मोडल रूपों के लिए रिलीज के बजाय नि: शुल्क उपयोग करना सुरक्षित है?
- 16. रिलीज फ़ाइल
- 17. बाइनरी रिलीज और स्रोत रिलीज के बीच अंतर?
- 18. वाणिज्यिक सॉफ्टवेयर के लिए अक्सर जल्दी/रिलीज रिलीज?
- 19. कक्षा के नाम के बजाय var का उपयोग क्यों करें?
- 20. स्ट्रिंग के बजाय फ़ाइल.न्यू प्रतीकों के तर्क क्यों नहीं हैं?
- 21. mysql के बजाय cassandra के साथ nosql क्यों?
- 22. समवर्ती प्रोग्रामिंग के लिए जावा के बजाय क्लोजर क्यों
- 23. रिलीज मोड के बजाय डीबग मोड का उपयोग करके उत्पादन में ऐप को तैनात करना?
- 24. सी # डीबग बनाम रिलीज
- 25. Q_ASSERT रिलीज निर्माण semantics
- 26. Autorelease बनाम रिलीज
- 27. एंड्रॉइड रिलीज के लिए स्वचालन
- 28. बीटा रिलीज
- 29. रिलीज बिल्ड
- 30. 0.9 रिलीज
'एनडीईबीयूजी 'का मतलब है * कोई डीबग * नहीं। 'रिलीज 'अधिक मतलब हो सकता है। – cnicutar
"डीबग"/"डीबग नहीं" के पास कुछ प्रोग्रामिंग वातावरण के लिए कुछ अर्थ है। "रिलीज"/"रिलीज सॉफ़्टवेयर"/"रिलीज करना" पूरी तरह से अलग वार्तालाप है जो आपके द्वारा कंपाइलर झंडे चुनने के बाद लंबे समय तक होता है। –
'#if परिभाषित (रिलीज)' '# परिभाषित करें NDEBUG'' else' '#undef NDEBUG'' endif' – pmg