c assert assertion handling c with examples
यह C ++ Assert Tutorial पर C ++ में अभिक्रियाओं पर प्रकाश डालता है, जो प्रोग्रामर द्वारा निर्मित प्रोग्राम में मान्यताओं का परीक्षण करने के लिए कथन हैं:
चरित्र को स्ट्रिंग c ++ में बदलें
C ++ प्रोग्राम में, हम आमतौर पर एक प्रोग्राम में धारणा बनाते हैं जैसे कि एक सरणी इंडेक्स शून्य से अधिक होना चाहिए।
जब ये धारणाएँ सही हो जाती हैं, तो प्रोग्राम ठीक चलता है लेकिन जब ये धारणाएँ झूठी हो जाती हैं, तो प्रोग्राम सामान्य रूप से समाप्त नहीं होता है।
=> विशेषज्ञों से पूरा सी ++ कोर्स के लिए यहां जाएं।
आप क्या सीखेंगे:
C ++ में जोर
एक मुखर C ++ में एक बयान है जो ऊपर बताई गई स्थिति की तरह परीक्षण करता है। यदि स्थिति सही है, तो प्रोग्राम सामान्य रूप से जारी रहता है और यदि स्थिति गलत है, तो प्रोग्राम समाप्त हो गया है और एक त्रुटि संदेश प्रदर्शित होता है।
हम एक अभिकर्मक प्रीप्रोसेसर मैक्रो का उपयोग करके एक मुखरता प्रदान कर सकते हैं।
पूर्णांक myInt के साथ, हम यह कहकर एक घोषणा कर सकते हैं कि myInt निम्नलिखित तरीके से> 0 होना चाहिए।
assert (myInt > 0);
मान लीजिए कि निर्दिष्ट myInt का मान -1 है, इसलिए जब कंपाइलर उपरोक्त कथन का सामना करता है, तो asorion विफल हो जाता है क्योंकि myInt मान -1 है। एक बार असफल होने पर, प्रोग्राम के नाम और लाइन नंबर के साथ अमान्य दावे को बताते हुए एक संदेश जारी किया जाता है और कार्यक्रम को समाप्त कर दिया जाता है।
मुखर का एक सामान्य प्रोटोटाइप इस प्रकार है:
assert (स्थिति) जहां हालत => अदिश प्रकार की अभिव्यक्ति
एक मुखर एक प्रीप्रोसेसर मैक्रो है जिसका उपयोग सशर्त अभिव्यक्ति का मूल्यांकन करने के लिए किया जाता है। यदि सशर्त अभिव्यक्ति गलत का मूल्यांकन करती है, तो त्रुटि संदेश प्रदर्शित करने के बाद कार्यक्रम को समाप्त कर दिया जाता है। त्रुटि संदेश में आमतौर पर विफल सशर्त अभिव्यक्ति, कोड फ़ाइल का नाम और मुखर की पंक्ति संख्या शामिल होती है।
इस प्रकार हमें पता चलता है कि समस्या कहां हुई और साथ ही कोड में क्या समस्या है। इसलिए अभिकथन का उपयोग डिबगिंग को अधिक कुशल बनाता है।
सी ++ हेडर< पुलाव > मुखर कार्यक्षमता शामिल है। हम ज्यादातर कोड में एसेर कार्यक्षमता का उपयोग यह जांचने के लिए करते हैं कि क्या फ़ंक्शन के लिए दिए गए पैरामीटर मान्य हैं, फ़ंक्शन के रिटर्न मूल्य की जांच करने के लिए या अन्य चीजों के बीच सरणी सीमा की जांच करने के लिए।
C ++ अभिकथन का मूल उदाहरण।
#include #include using namespace std; void display_number(int* myInt) { assert (myInt!=NULL); cout<<'myInt contains value' << ' = '<<*myInt< आउटपुट:

उपरोक्त कार्यक्रम में, हमने एक मुखर कॉल का उपयोग किया है जिसमें डिस्प्ले_नंबर फ़ंक्शन में अभिव्यक्ति (myInt! = NULL) शामिल है। पहले मुख्य फ़ंक्शन में, हम एक पॉइंटर वेरिएबल second_ptr पास करते हैं जिसमें वेरिएबल myptr का पता होता है। जब यह कॉल किया जाता है, मुखर सच है। इसलिए कार्यक्रम निष्पादन सामान्य है और मूल्य प्रदर्शित होता है।
Display_number के लिए दूसरी कॉल में, हम अशक्त सूचक को पास करते हैं जिससे असत्य झूठ हो जाता है। इस प्रकार जब दूसरी कॉल की जाती है, तो जैसा कि विफल संदेश प्रदर्शित होता है जैसा कि आउटपुट में दिखाया गया है।
NDEBUG के साथ दावे को अक्षम करना
जब हम अभिकथन का उपयोग करते हैं तो वे रनटाइम पर जांचे जाते हैं। अभिकथन डिबगिंग को कुशल बनाते हैं, लेकिन आवेदन के रिलीज बिल्ड में मुखरता को शामिल नहीं करने पर ध्यान दिया जाना चाहिए। ऐसा इसलिए है क्योंकि हम जानते हैं कि जब हम किसी एप्लिकेशन को जारी करते हैं, तो हम इसे केवल तभी करते हैं जब हमें यह सुनिश्चित हो जाता है कि एप्लिकेशन पूरी तरह से परीक्षण किया गया है।
जब हम सॉफ्टवेयर जारी करते हैं तो हमें सभी अभिक्रियाओं को निष्क्रिय करना होगा। हम NDEBUG मैक्रो का उपयोग करके किसी प्रोग्राम में अभिक्रियाओं को अक्षम कर सकते हैं। एक प्रोग्राम में NDEBUG मैक्रो का उपयोग करना सभी कॉल को मुखर करने में अक्षम करता है।
हम सभी मुखर बयानों को निष्क्रिय करने के लिए कार्यक्रम में नीचे दी गई एक पंक्ति शामिल कर सकते हैं।
#define NDEBUG
C ++ प्रोग्राम्स का पालन करने से पता चलता है कि जब NDEBUG के सक्रिय होने के साथ ही NDEBUG पर टिप्पणी की जाती है तो प्रोग्राम कैसे व्यवहार करता है।
# 1) NDEBUG निर्दिष्ट है लेकिन टिप्पणी की गई है।
#include // uncomment to disable assert() //#define NDEBUG #include using namespace std; int main() { assert(2+2==3+1); cout << 'Expression valid...Execution continues.
'; assert(2+2==1+1); cout << 'Asset disabled...execution continuous with invalid expression
'; }
आउटपुट:
विंडोज़ 10 पर .jar फाइलें कैसे चलाएं

इस कार्यक्रम में, हमने #define NDEBUG स्टेटमेंट निर्दिष्ट किया है लेकिन टिप्पणी की गई है। इसका अर्थ है कि मुखर कथन सक्रिय है। इस प्रकार जब प्रोग्राम निष्पादित किया जाता है, तो दूसरा कॉल असत्य रिटर्न करने के लिए गलत हो जाता है और एक त्रुटि संदेश फ्लैश किया जाता है और प्रोग्राम निरस्त कर दिया जाता है।
# 2) NDEBUG सक्रिय है।
#include // uncomment: assert() disabled #define NDEBUG #include using namespace std; int main() { assert(2+2==3+1); cout << 'Expression valid...Execution continues.
'; assert(2+2==1+1); cout << 'Assert disabled...execution continuous with invalid expression
'; }
आउटपुट:

इस कार्यक्रम में, हमने NDEBUG मैक्रो को अनलॉक्ड किया। अब जब हम कार्यक्रम को निष्पादित करते हैं, तो मुखर कथन अधिक सक्रिय नहीं होते हैं। इसलिए कार्यक्रम तब भी अपना सामान्य निष्पादन जारी रखता है जब मुखर कथन में दूसरी स्थिति झूठी होती है।
इस प्रकार लाइन #define NDEBUG को असुविधाजनक करके, हमने कार्यक्रम में मुखर बयानों को निष्क्रिय कर दिया है।
मुखर और static_assert
अब तक हमने जो मुखर देखा है उसे रन टाइम पर निष्पादित किया जाता है। C ++ एसिस्टेंट के एक और रूप का समर्थन करता है जिसे static_assert के रूप में जाना जाता है और यह संकलन-टाइम एसेर्शन चेकिंग करता है। यह C ++ 11 के बाद से मौजूद है।
एक static_assert में निम्न सामान्य वाक्यविन्यास होता है।
static_assert (bool_constexpr, message)
यहाँ bool_constexpr => cContextually परिवर्तित प्रकार की बूल की निरंतर अभिव्यक्ति।
संदेश => स्ट्रिंग जो त्रुटि संदेश के रूप में दिखाई देगी यदि bool_constexpr गलत है।
इसलिए अगर bool_constexpr सच का मूल्यांकन करता है, तो प्रोग्राम सामान्य रूप से आगे बढ़ता है। यदि bool_constexpr झूठी का मूल्यांकन करता है, तो एक कंपाइलर त्रुटि जारी की जाती है।
नीचे दिया गया प्रोग्राम C ++ प्रोग्राम में static_assert के उपयोग को दर्शाता है।
पीसी को साफ करने के लिए सबसे अच्छा मुफ्त सॉफ्टवेयर
#include #include using namespace std; int main() { assert(2+2==3+1); static_assert(2+2==3+1, '2+2 = 3+1'); cout << 'Expression valid...Execution continues.
'; assert(2+2==1+1); static_assert(2+2==1+1, '2+2 != 1+1'); cout << 'Assert disabled...execution continuous with invalid expression
'; }
आउटपुट:

उपरोक्त कार्यक्रम में, हमने एक अभिव्यक्ति और एक संदेश के साथ static_assert प्रदान किया है। जब यह विफल होता है, तो एक संकलक त्रुटि जारी की जाती है जैसा कि आउटपुट में दिखाया गया है।
बार बार पूछे जाने वाले प्रश्न
Q # 1) C ++ में Assert क्या है?
उत्तर: C ++ में एक मुखर एक पूर्वनिर्धारित मैक्रो है, जिसका उपयोग करके हम प्रोग्राम में निर्धारित कुछ मान्यताओं का परीक्षण कर सकते हैं। जब एक मुखर कथन में सशर्त अभिव्यक्ति को सही पर सेट किया जाता है, तो कार्यक्रम सामान्य रूप से जारी रहता है। लेकिन जब अभिव्यक्ति झूठी होती है, तो एक त्रुटि संदेश जारी किया जाता है और कार्यक्रम समाप्त कर दिया जाता है।
Q # 2) static_assert क्या है?
उत्तर: Static_assert का संकलन समय पर मूल्यांकन किया जाता है, जो कि कथन () कथन के विरुद्ध होता है।
Static_assert को C ++ 11 से C ++ में शामिल किया गया है। यह सशर्त अभिव्यक्ति और तर्क के रूप में प्रदर्शित होने के लिए एक संदेश लेता है। जब स्थिति झूठी का मूल्यांकन करती है, तो एक संकलक त्रुटि जारी की जाती है और प्रदर्शित संदेश। फिर कार्यक्रम को समाप्त कर दिया जाता है।
Q # 3) मुखर () मैक्रो का उद्देश्य क्या है?
उत्तर: Assert () मैक्रो का उपयोग उन परिस्थितियों या मान्यताओं का परीक्षण करने के लिए किया जाता है जो किसी प्रोग्राम में नहीं होनी चाहिए। उदाहरण के लिए, सरणी सूचकांक हमेशा होना चाहिए> 0. एक और धारणा 2 + 2 == 3 + 1 हो सकती है।
इसलिए मुखर () का उपयोग करके हम ऐसी धारणाओं का परीक्षण कर सकते हैं और जब तक वे सत्य का मूल्यांकन करते हैं, हमारा कार्यक्रम सामान्य रूप से चलता है। जब वे झूठे होते हैं, तो कार्यक्रम समाप्त कर दिया जाता है।
निष्कर्ष
इस ट्यूटोरियल में, हमने C ++ में मुखर () कथनों का कार्य देखा है। हेडर में मुखर () स्टेटमेंट को परिभाषित किया गया है। हम NDEBUG मैक्रो का उपयोग करके Assert को निष्क्रिय कर सकते हैं। डेवलपर्स को सावधान रहना चाहिए कि उत्पादन कोड में एस्टर का उपयोग नहीं किया जा सकता है क्योंकि यह उम्मीद की जाती है कि उत्पादन कोड पूरी तरह से परीक्षण किया गया है और बग-रहित है।
मुखर () कथन के अलावा C ++ 11 भी static_assert () का समर्थन करता है जिसका संकलन समय पर किया जाता है। जब static_asset () गलत का मूल्यांकन करता है, तो एक संकलक त्रुटि जारी की जाती है और कार्यक्रम समाप्त हो जाता है।
जोर कार्यक्रम में मान्यताओं का परीक्षण करने का एक तरीका है और जोर के अंदर सशर्त अभिव्यक्तियों का मूल्यांकन करके, हम कार्यक्रम को अच्छी तरह से परख सकते हैं और डिबग अधिक कुशल हो जाता है।
=> यहां सभी C ++ ट्यूटोरियल की जांच करें।
अनुशंसित पाठ
- कोड उदाहरणों के साथ C # अपवाद हैंडलिंग ट्यूटोरियल
- सेलेनियम अभिकथन उदाहरण - परियोजनाओं में व्यावहारिक अनुप्रयोग
- उदाहरणों के साथ सी # प्रोग्राम स्ट्रक्चर और बेसिक सिंटेक्स
- उदाहरणों के साथ अजगर डेटाइम ट्यूटोरियल
- उदाहरणों के साथ यूनिक्स में कमान काटें
- यूनिक्स कैट कमांड सिंटैक्स, उदाहरण के साथ विकल्प
- उदाहरणों के साथ MongoDB में कर्सर का उपयोग
- उदाहरणों के साथ यूनिक्स में Ls कमांड