पर जोर देने के बजाय क्यूटी में Q_ASSERT मैक्रो है। <cassert>
से assert के बजाय इसका उपयोग करने का क्या फायदा है?क्यू_एएसएसईआरटी
उत्तर
Q_ASSERT
एक कस्टम ज़ोर मैक्रो जो माना जाता है कि मानक assert
समारोह को बढ़ाता है।
त्रुटि संदेश द्वारा qFatal()
, जो मानक ज़ोर मैक्रो की तुलना में कुछ प्लेटफार्मों पर थोड़ा बेहतर व्यवहार कर सकते हैं नियंत्रित किया जाता है। उदाहरण के लिए विंडोज़ पर यह उस बिंदु पर विजुअल स्टूडियो डीबगर को ट्रिगर करेगा जहां दावा abort()
पर कॉल करने के बजाय विफल रहता है।
तुम भी क्यूटी त्रुटि संदेश कार्यों का उत्पादन अनुप्रेषित कर सकते हैं इस तरह के qFatal
अपना कस्टम संदेश हैंडलर के लिए (qInstallMessageHandler() के साथ) के रूप में। यह उदाहरण के लिए उपयोगी हो सकता है यदि आप त्रुटियों को किसी फ़ाइल में रीडायरेक्ट करना चाहते हैं।
भी ध्यान रखें कि Q_ASSERT
साथ अक्षम किया गया है मैक्रो QT_NO_DEBUG
(जबकि assert
NDEBUG
रूप से अक्षम है): यह आपके क्यूटी से संबंधित कोड और बाकी के बीच इस बात पर ज़ोर अलग करने के लिए इस्तेमाल किया जा सकता।
बहुत ही दस्तावेज़ से:
यह अगर QT_NO_DEBUG संकलन के दौरान परिभाषित किया गया था कुछ नहीं करता है।
तो, इसके बारे में सोचो: Q_ASSERT
NDEBUG
के अभाव पर निर्भर नहीं है, assert
है। #ifndef NDEBUG
को कुछ भी करने के लिए assert()
के लिए आवश्यक है और अक्सर उपयोगकर्ता (और संभवतः पुस्तकालय ..?) कोड में अन्य सामान्य डीबग-केवल चीजों को निर्धारित करने के लिए भी उपयोग किया जाता है।
एक अलग मैक्रो का उपयोग करना, जो लोग केवल क्यूटी संबंधित चीज़ों को डिबग करने के लिए चाहते हो जाएगा के लिए एक फायदा है NDEBUG
छोड़ने अपरिभाषित है और इस तरह नीचे वजन डिबग-केवल सामान के साथ कोड के बाकी है कि कार्यक्रम यदि NDEBUG
ब्लोट जाएगा बिना परिभाषित नहीं किया गया है, विशेष रूप से assert()
एस।
तो, आप -DNDEBUG
लेकिन साथ संकलन नहीं कर सका-DQT_NO_DEBUG
आप रिलीज मोड अर्थ विज्ञान के साथ 'सामान्य' चीजों को संकलित करने, लेकिन अभी भी क्यूटी सामान को डिबगिंग लागू चाहते थे।
जटिल जीयूआई अनुप्रयोग विकसित करते समय यह निश्चित रूप से बहुत उपयोगी है। मैं क्यूटी का उपयोग नहीं करता (अभी तक?) लेकिन जीटीके +/gtkmm [... जो कि मुझे यकीन है कि मेरे अस्तित्व के टूलकिट्स में ऐसी चीजों का उपयोग करने का लाभ देखें ... लेकिन मैंने अभी तक उन्हें नहीं देखा है ;-)]
मैं यहाँ इस पर हाल ही में एनिमेटेड चर्चा याद है, एक orthogonal प्रस्ताव की चर्चा के साथ interwoven: ISO C++ Standard - Future Proposals › Exception stack trace information.
हाँ मैंने देखा कि विभिन्न डीबग परिभाषित करता है, मैं सोच रहा था कि इसमें कुछ और था या नहीं। लेकिन यह संभावना है कि यह संभावना है। – Zitrax
एक साइड नोट पर यदि आप मैक्रोज़ के काम पर कस्टम कैसे काम करते हैं और वे उपयोगी क्यों हैं, तो अधिक विस्तृत स्पष्टीकरण चाहते हैं, _Game प्रोग्रामिंग Gems_ में स्टीव राबिन द्वारा ** ** पर जोर से निचोड़ना ** – Louen