क्या इसका उपयोग करना बुरा व्यवहार है?
यदि दुर्व्यवहार किया गया है, हाँ, विशेष रूप से assert
।
एक दुर्व्यवहार सक्रिय होने के लिए उन assert
कथनों के आधार पर है। आपको कुछ भी करने के लिए assert
पर कभी भी निर्भर नहीं होना चाहिए क्योंकि कोड को NDEBUG
परिभाषित किया जा सकता है और फिर assert
कुछ भी नहीं करता है। उत्पादन कोड को कई बार NDEBUG
के साथ संकलित किया गया है ताकि यह सुनिश्चित किया जा सके कि assert
कथन गायब हो जाएं।
जब तक कि आप एक-ऑफ प्रोग्राम नहीं लिख रहे हैं जो एक या दो दिन से अधिक समय तक नहीं जी रहेगा, तो आपको उपयोगकर्ता इनपुट को सत्यापित करने के लिए उपयोग नहीं करना चाहिए। उपयोगकर्ता इस बात पर परवाह नहीं करते कि कोड कहां विफल हुआ, और मुद्रित संदेश कई उपयोगकर्ताओं को एक विदेशी भाषा की तरह दिखता है। यह उपयोगकर्ता को त्रुटि को ठीक करने का तरीका नहीं बताता है। यह डिजाइन द्वारा भी बहुत क्षमाशील है। उपयोगकर्ता इनपुट त्रुटि के जवाब में जारी किया गया संदेश एक संदेश होना चाहिए जो उपयोगकर्ता को समस्या को ठीक करने का तरीका बताता है। संदेश के बाद सबसे अच्छी कार्रवाई उपयोगकर्ता को त्रुटि को ठीक करने का तरीका प्रदान करना है। यदि ऐसा नहीं किया जा सकता है, और यदि कार्यक्रम को समाप्त करने का एकमात्र व्यवहार्य प्रतिक्रिया है, तो कार्यक्रम को साफ-सफाई समाप्त करनी चाहिए। डिज़ाइन द्वारा, assert
का परिणाम साफ शटडाउन नहीं होता है। यह exit()
की बजाय abort()
पर कॉल करता है।
कई मशीनों पर abort()
का एक परिणाम कोर डंप का उत्पादन करना है। एक कोर डंप प्रोग्रामर के लिए एक महान त्रुटि संदेश है। कोर डंप के साथ, एक प्रोग्रामर डीबगर का उपयोग करके देख सकता है कि क्या बहुत बढ़िया हुआ है। abort()
का नकारात्मक पक्ष यह है कि चीजें साफ़ नहीं की जाती हैं। निरस्त "स्वचालित या स्थैतिक भंडारण अवधि की वस्तुओं के लिए विनाशकों को निष्पादित किए बिना कार्यक्रम को समाप्त कर देता है और बिना कार्यों को atexit()
पर कॉल किए बिना कॉल करता है।"
नीचे पंक्ति: प्रोग्रामिंग त्रुटियों के परीक्षण के लिए assert
का उपयोग करने के लिए यह ठीक है (और अच्छा), लेकिन केवल एक गैर-उत्पादन सेटिंग में। उपयोगकर्ता त्रुटियों के परीक्षण के लिए कुछ और उपयोग करें।
स्रोत
2013-08-13 14:14:42
'static_assert' एक घोषणा है, जो मूल भाषा में बनाई गई है। यह किसी भी चीज़ में विस्तार नहीं करता है क्योंकि यदि यह सफल नहीं होता है, तो संकलन बंद हो जाता है। – jrok
@KerrekSB मैंने ** तीन ** स्पष्ट प्रश्न पूछे हैं, कृपया – Oleksiy
धारणा बनाने से पहले उन्हें पढ़ने के लिए समय दें, आप यह निर्दिष्ट करने के लिए जोर देते हैं कि आपके प्रोग्रामिंग तर्क में कोई त्रुटि है और इसे कोड में ठीक किया जाना चाहिए। कोड में विभिन्न लॉजिकल पथों के बीच शाखा में 'if' का उपयोग किया जाता है। यह एक बड़ा अंतर – Default