2008-11-06 14 views

उत्तर

22

रिलीज़ मोड में संकलन NDEBUG को परिभाषित करने में शामिल है, तो हाँ।

assert (CRT)

+0

दस्तावेजों में कहा गया है "ज़ोर दिनचर्या सी चलाने के समय पुस्तकालयों के दोनों रिहाई और डिबग संस्करणों में उपलब्ध है।" Assert.h हेडर को देखते हुए, यह निश्चित रूप से सच है कि इसमें शामिल होने से पहले एनडीईबीयूजी को परिभाषित करने से जोर() को नो-ऑप में संकलित करने का कारण बन जाएगा। हालांकि, यह रिलीज मोड कोड के लिए पूरी तरह से संभव है जो एनडीईबीयूजी को निरस्त करने के लिए दावा करने के लिए परिभाषित नहीं करता है। मैं बस अपनी समझ को स्पष्ट करना चाहता था और जो मिला वह साझा करना चाहता था। –

4

IIRC, जोर (एक्स) एक मैक्रो कि कुछ भी नहीं करने के लिए मूल्यांकन करता है जब NDEBUG परिभाषित किया गया है, जो रिलीज के लिए मानक दृश्य स्टूडियो में बनाता है।

2

सिर्फ अगर NDEBUG परिभाषित किया गया है मुझे लगता है कि (यह विजुअल C++ क्षुधा के लिए डिफ़ॉल्ट रूप से किया जाएगा जो)।

5

ज़ोर मैक्रो (कम से कम यह आम तौर पर एक मैक्रो है) आम तौर पर रिहाई कोड में कोई-op के परिभाषित किया गया है। यह केवल डीबग कोड में ट्रिगर होगा। यह कहने के बाद। मैंने उन स्थानों पर काम किया है जिन्होंने अपने स्वयं के जोर मैक्रो को परिभाषित किया है, और यह डीबग और रिलीज मोड दोनों में ट्रिगर हुआ है।

मैं उपयोग करने के लिए सिखाया गया था शर्त है जो "कभी नहीं" एक समारोह के लिए पूर्व शर्तों के रूप में, झूठी ऐसे हो सकता है के लिए दावा है।

1

मुझे लगता है कि यह एक गलती ज़ोर से सही व्यवहार पर बहुत अधिक भरोसा करने के लिए है देखें। "ज़ोर (expr)" का सही अर्थ विज्ञान हैं:

  • अभिव्यक्ति expr या मूल्यांकन नहीं किया जा सकता है हो सकता है।
  • यदि expr सत्य है, तो निष्पादन सामान्य रूप से जारी रहता है।
  • यदि expr गलत है, तो क्या होता है अपरिभाषित।

http://nedbatchelder.com/text/assert.html

+1

सही अर्थ विज्ञान आईएसओ सी में वर्णित दावे सक्षम हैं, तो ('NDEBUG' सहित करने से पहले निर्धारित नहीं है' ') तो एक' assert' को नियंत्रित अभिव्यक्ति बराबर शून्य तुलना है, तो अभिव्यक्ति का पाठ, मानक त्रुटि स्ट्रीम पर कुछ कार्यान्वयन-परिभाषित संदेश में फ़ाइल और लाइन संख्या मुद्रित की जाती है। फिर 'abort' समारोह कहा जाता है। (सी 99 के अनुसार, समारोह नाम भी शामिल करने के लिए संदेश की आवश्यकता है।) – Kaz

0

पर अधिक जीएनयू के लिए एक ही:

#ifdef NDEBUG 

    # define assert(expr)  (__ASSERT_VOID_CAST (0)) 
संबंधित मुद्दे