Unreachable code
कंप्यूटर प्रोग्रामिंग में, अप्राप्य कोड एक प्रोग्राम के स्रोत कोड का हिस्सा है जिसे कभी भी निष्पादित नहीं किया जा सकता है क्योंकि बाकी प्रोग्राम से कोड के लिए कोई नियंत्रण प्रवाह पथ मौजूद नहीं है। अप्राप्य कोड को कभी-कभी मृत कोड भी कहा जाता है, हालांकि मृत कोड उस कोड को भी संदर्भित कर सकता है जिसे निष्पादित किया जाता है लेकिन इसका प्रोग्राम के आउटपुट पर कोई प्रभाव नहीं पड़ता है। अप्राप्य कोड को आम तौर पर कई कारणों से अवांछनीय माना जाता हैः यह अनावश्यक रूप से मेमोरी का उपयोग करता है यह सीपीयू के निर्देश कैश का अनावश्यक उपयोग कर सकता है यह डेटा स्थान को भी कम कर सकता है समय और प्रयास कोड का परीक्षण, रखरखाव और दस्तावेजीकरण करने में खर्च किया जा सकता है जो कभी भी उपयोग नहीं किया जाता है कभी-कभी कोड का उपयोग करने के लिए एक स्वचालित परीक्षण ही एकमात्र चीज होती है। हालाँकि, अप्राप्य कोड के कुछ वैध उपयोग हो सकते हैं, जैसे कि डिबगर के माध्यम से मैन्युअल रूप से कॉल करने या कूदने के लिए कार्यों की एक लाइब्रेरी प्रदान करना, जबकि प्रोग्राम को एक ब्रेकप्वाइंट के बाद रोक दिया जाता है। यह विशेष रूप से कार्यक्रम की आंतरिक स्थिति की जांच और सुंदर-मुद्रण के लिए उपयोगी है। भेजे गए उत्पाद में इस तरह का कोड होना समझदारी की बात हो सकती है, ताकि एक डेवलपर क्लाइंट के चल रहे उदाहरण में एक डीबगर संलग्न कर सके। अप्राप्य कोड कई कारणों से मौजूद हो सकता है, जैसे किः जटिल सशर्त शाखाओं में प्रोग्रामिंग त्रुटियां एक अनुकूलन संकलक द्वारा किए गए आंतरिक परिवर्तनों का परिणाम; नए या संशोधित कोड का अपूर्ण परीक्षण विरासत कोड कोड एक अन्य कार्यान्वयन अप्राप्य कोड द्वारा प्रतिस्थापित किया गया जिसे एक प्रोग्रामर ने हटाने का फैसला नहीं किया क्योंकि यह पहुंच योग्य कोड के साथ मिश्रित है संभावित रूप से पहुँच योग्य कोड जो वर्तमान उपयोग के मामलों में कभी भी निष्क्रिय कोड की आवश्यकता नहीं होती है जिसे बाद में आवश्यकता पड़ने पर जानबूझकर रखा जाता है कोड का उपयोग केवल डिबगिंग के लिए किया जाता है। लिगेसी कोड वह है जो कभी उपयोगी था लेकिन अब इसका उपयोग या आवश्यकता नहीं है। लेकिन अप्राप्य कोड एक जटिल पुस्तकालय, मॉड्यूल या दिनचर्या का हिस्सा भी हो सकता है जहां यह दूसरों के लिए उपयोगी है या उन परिस्थितियों में जो किसी विशेष परिदृश्य में नहीं मिलते हैं। इस तरह के सशर्त रूप से पहुंच से बाहर कोड का एक उदाहरण संकलक के रनटाइम लाइब्रेरी में एक सामान्य स्ट्रिंग स्वरूपण कार्य का कार्यान्वयन हो सकता है, जिसमें सभी संभावित तर्कों को संसाधित करने के लिए जटिल कोड होता है, जिनमें से केवल एक छोटे से सबसेट का वास्तव में उपयोग किया जाता है। संकलक आम तौर पर संकलन समय पर अप्रयुक्त कोड अनुभागों को हटाने में सक्षम नहीं होंगे, क्योंकि व्यवहार काफी हद तक रन टाइम पर तर्कों के मूल्यों द्वारा निर्धारित किया जाता है। उदाहरण सी कोड के इस टुकड़े मेंः इंट फू (इंट एक्स, इंट वाई) {रिटर्न एक्स + वाई; इंट जेड = एक्स * वाई;} परिभाषा कभी भी नहीं पहुंचती है क्योंकि फ़ंक्शन हमेशा इससे पहले लौटता है। इसलिए, न तो भंडारण आवंटित करने की आवश्यकता है और न ही आरंभ करने की आवश्यकता है। फरवरी 2014 से एप्पल के एसएसएल/टीएलएस में एक प्रमुख सुरक्षा दोष था जिसे औपचारिक रूप से और अनौपचारिक रूप से "गोटो फेल बग" के रूप में जाना जाता है। प्रासंगिक कोड टुकड़ा हैः स्थिर ओएसएसटैटस एसएसएलवीरीफाईसाइन्डसर्वरकीएक्सचेंज (एसएसएलकॉन्टेक्स्ट * सीटीएक्स, बूल आईएसआरएसए, एसएसएलबीफर साइन्डपराम्स, uint8 _ t * सिग्नेचर, यूआईएनटी16 सिग्नेचरलेन) {ओएसएसटैटस एरर; यदि ((err = SSLHashSHA1.update (& हैशसीटीएक्स, & सर्वररैंडम)! = 0) गोटो फेल; यदि ((err = SSLHashSHA1.update (& हैशसीटीएक्स, & साइन्डपराम्स)! = 0) गोटो फेल; गोटो फेल; यदि (err = SSLHashSHA1.final ( सी भाषा के वाक्यविन्यास में, दूसरा बिना शर्त है, और इसलिए हमेशा कॉल को SSLHashSHA1.final पर छोड़ देता है। नतीजतन, त्रुटि SHA1 अद्यतन संचालन की स्थिति को बनाए रखेगी, और हस्ताक्षर सत्यापन कभी विफल नहीं होगा। यहाँ, पहुंच से बाहर कोड अंतिम कार्य के लिए कॉल है। क्लैंग कम्पाइलर को विकल्प के साथ लागू करना-सब कुछ में अप्राप्य कोड विश्लेषण शामिल है, जो इस कोड के लिए एक चेतावनी को ट्रिगर करेगा। सी + + में, कुछ संरचनाओं को अनिर्धारित व्यवहार के लिए निर्दिष्ट किया जाता है। एक संकलक किसी भी व्यवहार को लागू करने के लिए स्वतंत्र है या कोई नहीं, और आम तौर पर एक अनुकूलन संकलक यह मान लेगा कि कोड पहुंच से बाहर है। पहुँच से बाहर कोड का विश्लेषण पता लगाना नियंत्रण प्रवाह विश्लेषण का एक रूप है जो कोड का पता लगाने के लिए है जो किसी भी संभावित कार्यक्रम स्थिति में कभी नहीं पहुँचा जा सकता है। कुछ भाषाओं में (जैसे। जावा) पहुंच से बाहर कोड के कुछ रूपों की स्पष्ट रूप से अनुमति नहीं है। पहुँच से बाहर कोड को हटाने वाले अनुकूलन को मृत कोड उन्मूलन के रूप में जाना जाता है। एक इष्टतम संकलक (जैसे, सामान्य उप-अभिव्यक्ति उन्मूलन) द्वारा किए गए परिवर्तनों के परिणामस्वरूप कोड पहुंच से बाहर हो सकता है। व्यवहार में विश्लेषण के परिष्कार का पता लगाने योग्य अप्राप्य कोड की मात्रा पर महत्वपूर्ण प्रभाव पड़ता है। उदाहरण के लिए, निरंतर तह और सरल प्रवाह विश्लेषण से पता चलता है कि निम्नलिखित कोड में आई. एफ.-कथन के अंदर पहुंच योग्य नहीं हैः आई. एन. = 2 + 1; यदि (एन = = 4) {/* पहुंच योग्य नहीं है */} हालांकि, यह पता लगाने के लिए बहुत अधिक परिष्कार की आवश्यकता है कि संबंधित ब्लॉक निम्नलिखित कोड में पहुंच योग्य नहीं हैः डबल एक्स = एस. क्यू. आर. टी. (2); यदि (एक्स> 5) {/* पहुंच योग्य नहीं है */} पहुंच योग्य कोड उन्मूलन तकनीक डेड कोड उन्मूलन और अनावश्यक कोड उन्मूलन के रूप में अनुकूलन के उसी वर्ग में है। कुछ मामलों में, एक व्यावहारिक दृष्टिकोण सरल अप्राप्य मानदंडों का एक संयोजन और अधिक जटिल मामलों को संभालने के लिए एक प्रोफाइलर का उपयोग हो सकता है। सामान्य रूप से प्रोफाइलिंग कोड के एक टुकड़े की पहुंच के बारे में कुछ भी साबित नहीं कर सकती है, लेकिन संभावित रूप से पहुंच से बाहर कोड खोजने के लिए एक अच्छा शोध हो सकता है। एक बार कोड का एक संदिग्ध टुकड़ा मिलने के बाद, अन्य तरीकों, जैसे कि एक अधिक शक्तिशाली कोड विश्लेषण उपकरण, या यहां तक कि हाथ से विश्लेषण, का उपयोग यह तय करने के लिए किया जा सकता है कि कोड वास्तव में पहुंच से बाहर है या नहीं। कोड कवरेज रिडंडेंट कोड डेड कोड ऑक्सबो कोड संदर्भ एप्पेल, ए. डब्ल्यू. 1998 मॉडर्न कम्पाइलर इम्प्लीमेंटेशन इन जावा भी देखें। कैम्ब्रिज यूनिवर्सिटी प्रेस। मचनिक एस. एस. 1997 उन्नत संकलक डिजाइन और कार्यान्वयन। मॉर्गन कॉफ़मैन। संकलक अनुकूलन सॉफ्टवेयर विसंगतियाँ स्रोत कोड