मैं पिछले जवाबों में - और आंशिक रूप से विरोधाभास जोड़ना चाहूंगा। हालांकि यह निश्चित रूप से उपयोग करने के लिए आम है कि क्या है, अगर एक स्विच की तरह है कि अभिव्यक्ति के लिए विचारशील मूल्यों की पूरी रेंज को कवर करना चाहिए, यह कोई मतलब नहीं है कि किसी भी संभव स्थितियों की पूरी तरह से कवर किया जाता है। स्विच के निर्माण के बारे में भी यही कहा जा सकता है, इसलिए डिफ़ॉल्ट क्लॉज का उपयोग करने की आवश्यकता होती है, जो सभी शेष मूल्यों को पकड़ता है और यदि किसी भी तरह से आवश्यक नहीं है, तो इसका उपयोग एक सुरक्षा उपाय के रूप में किया जा सकता है।
सवाल ही एक अच्छा प्रति-उदाहरण पेश करता है: दूसरी स्थिति x से बिल्कुल भी संबंधित नहीं है (यही कारण है कि मैं अक्सर स्विच-आधारित संस्करण के आधार पर अधिक लचीला if- आधारित संस्करण पसंद करता हूं)। उदाहरण से यह स्पष्ट है कि यदि A से मुलाकात की जाती है, तो x को एक निश्चित मान पर सेट किया जाना चाहिए। क्या A से मुलाकात नहीं की जानी चाहिए, तो B की स्थिति का परीक्षण किया जाएगा। यदि यह मिलता है, तो x को एक और मान प्राप्त करना चाहिए। यदि न तो A और न ही B मिलते हैं, तो x अपरिवर्तित रहना चाहिए।
यहां हम देख सकते हैं कि पाठक के लिए प्रोग्रामर के इरादे पर टिप्पणी करने के लिए एक खाली शाखा का उपयोग किया जाना चाहिए।
दूसरी ओर, मैं यह नहीं देख सकता कि बयान के लिए विशेष रूप से नवीनतम और अंतरतम के लिए एक और खंड क्यों होना चाहिए। C में, 'if if' जैसी कोई चीज नहीं है। अगर और है तो ही है। इसके बजाय, MISRA के अनुसार, निर्माण को औपचारिक रूप से इस तरह से इंडेंट किया जाना चाहिए (और मुझे अपनी लाइनों पर शुरुआती घुंघराले ब्रेसिज़ लगाने चाहिए, लेकिन मुझे यह पसंद नहीं है):
if (A) {
// do something
}
else {
if (B) {
// do something else (no pun intended)
}
else {
// don't do anything here
}
}
जब MISRA हर शाखा के चारों ओर घुंघराले ब्रेसिज़ लगाने के लिए कहता है, तो यह "यदि ... और यदि निर्माण करता है" का उल्लेख करके खुद को विरोधाभासी करता है।
किसी को भी कुरूपता कल्पना कर सकते हैं की गहराई से नेस्टेड यदि किसी और के पेड़, एक तरफ ध्यान दें पर यहाँ देख । अब कल्पना कीजिए कि इस निर्माण को मनमाने ढंग से कहीं भी बढ़ाया जा सकता है। फिर अंत में एक और खंड के लिए पूछ रहा है, लेकिन कहीं और नहीं, बेतुका हो जाता है।
if (A) {
if (B) {
// do something
}
// you could to something here
}
else {
// or here
if (B) { // or C?
// do something else (no pun intended)
}
else {
// don't do anything here, if you don't want to
}
// what if I wanted to do something here? I need brackets for that.
}
इसलिए मुझे यकीन है कि जिन लोगों ने MISRA दिशा-निर्देश विकसित किए हैं, उनके पास स्विच-जैसे if- और अगर इरादे हैं।
अंत में, यह उनके लिए ठीक-ठीक परिभाषित करने के लिए आता है कि "अगर ... और यदि निर्माण करें"