2010-02-11 13 views
5

मुझे संदेह है कि कुछ एसोसिएशन कोड के दुष्प्रभाव हैं। मैं अपने कोड को संकलित करने के तरीके में कोई अन्य परिवर्तन किए बिना एएसएसईआरटी को बंद करना चाहता हूं। मैं एमएसवीएस 2008 का उपयोग कर रहा हूं। डीबग से रिलीज करने के लिए स्विचिंग ऐसा नहीं करेगा क्योंकि यह बदल जाएगा कि स्मृति कैसे शुरू की जाती है।मैं सी ++ में एएसएसईआरटी (एक्स) कैसे बंद कर सकता हूं?

उत्तर

6

cassert के समावेशन के बाद अपने हेडर फाइल के शीर्ष पर इस रखो (या एक शामिल है कि cassert शामिल)

#undef assert 
#define assert(x) ((void)0) 

कौन सा ज़ोर मार्को को पुनर्परिभाषित इतना है कि यह कुछ भी नहीं करने के लिए फैलता है।

+0

यदि मुझे गलत नहीं लगता है, तो यह दावा (प्रोग्राम समाप्ति) को बंद कर देता है, लेकिन अभिव्यक्ति को मूल्यांकन से हटा नहीं देता है और रोकता नहीं है। शायद: 'परिभाषित करें (एक्स) (शून्य) 0'? – UncleBens

+0

@UncleBens Ak, आप सही हैं, हालांकि '(शून्य) 0' की आवश्यकता नहीं है। '(X)' हालांकि है। – Yacoby

+2

@Yacoby: सामान्य रूप से, आप इसे चाहते हैं क्योंकि 'कथन' को एक कथन में विस्तार करना चेतावनियों और ऐसे में मदद करता है। उदाहरण के लिए, यदि 'assert' रिलीज मोड में कुछ भी नहीं फैलता है तो' if (foo) जोर दें (बार); अन्यथा जोर दें (बाज़); 'अगर खाली हो और/या अन्य खंडों के लिए खाली चेतावनी दी जा सकती है। कम से कम, सी मानक के नवीनतम मसौदे * की आवश्यकता है * अंतर्निहित जोर इस तरह लागू किया गया है। –

6

यदि आपका मतलब assert है, तो उसे एनडीईबीयूजी मैक्रो के साथ नियंत्रित किया जाना चाहिए।

+1

एनडीईबीयूजी स्मृति प्रारंभिकता को बदलता है, हालांकि – jbcoe

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