Unreachable code
કોમ્પ્યુટર પ્રોગ્રામિંગમાં, પહોંચી ન શકાય તેવો કોડ એ પ્રોગ્રામના સ્રોત કોડનો એક ભાગ છે જે ક્યારેય ચલાવી શકાતો નથી કારણ કે બાકીના પ્રોગ્રામમાંથી કોડ પર કોઈ નિયંત્રણ પ્રવાહ માર્ગ અસ્તિત્વમાં નથી. પહોંચી ન શકાય તેવા કોડને કેટલીકવાર ડેડ કોડ પણ કહેવામાં આવે છે, જો કે ડેડ કોડ એ કોડનો પણ ઉલ્લેખ કરી શકે છે જે ચલાવવામાં આવે છે પરંતુ પ્રોગ્રામના આઉટપુટ પર તેની કોઈ અસર થતી નથી. અપ્રાપ્ય કોડને સામાન્ય રીતે ઘણા કારણોસર અનિચ્છનીય માનવામાં આવે છેઃ તે બિનજરૂરી રીતે મેમરીનો ઉપયોગ કરે છે તે CPU ની સૂચના કેશનો બિનજરૂરી ઉપયોગ કરી શકે છે આ માહિતીના સ્થાનમાં પણ ઘટાડો કરી શકે છે સમય અને પ્રયત્ન પરીક્ષણ, જાળવણી અને દસ્તાવેજીકરણમાં ખર્ચવામાં આવી શકે છે જેનો ક્યારેય ઉપયોગ થતો નથી કેટલીકવાર કોડનો ઉપયોગ કરીને સ્વચાલિત પરીક્ષણ એકમાત્ર વસ્તુ છે. જો કે, પહોંચી ન શકાય તેવા કોડના કેટલાક કાયદેસર ઉપયોગો હોઈ શકે છે, જેમ કે ડિબગર દ્વારા જાતે કૉલ કરવા અથવા કૂદકો મારવા માટે કાર્યોની લાઇબ્રેરી પ્રદાન કરવી જ્યારે પ્રોગ્રામ બ્રેકપૉઇન્ટ પછી અટકાવવામાં આવે છે. આ ખાસ કરીને કાર્યક્રમની આંતરિક સ્થિતિની તપાસ કરવા અને સુંદર રીતે છાપવા માટે ઉપયોગી છે. મોકલાયેલા ઉત્પાદનમાં આવા કોડ રાખવાનો અર્થ થઈ શકે છે, જેથી વિકાસકર્તા ક્લાયન્ટના ચાલી રહેલા ઉદાહરણમાં ડીબગરને જોડી શકે. અનરીચેબલ કોડના કારણો ઘણા કારણોસર અસ્તિત્વમાં હોઈ શકે છે, જેમ કેઃ જટિલ શરતી શાખાઓમાં પ્રોગ્રામિંગ ભૂલો-ઓપ્ટિમાઇઝિંગ કમ્પાઇલર દ્વારા કરવામાં આવેલા આંતરિક પરિવર્તનોનું પરિણામ; નવા અથવા સુધારેલા કોડનું અપૂર્ણ પરીક્ષણ લેગસી કોડ કોડને અન્ય અમલીકરણ દ્વારા રદ કરવામાં આવ્યો-અનરીચેબલ કોડ કે જેને પ્રોગ્રામરે કાઢી ન નાખવાનો નિર્ણય કર્યો કારણ કે તે પહોંચી શકાય તેવા કોડ સાથે ભળી ગયો છે સંભવિત રીતે પહોંચી શકાય તેવા કોડ કે જે વર્તમાન ઉપયોગના કિસ્સાઓમાં ક્યારેય નિષ્ક્રિય કોડની જરૂર નથી હોતી જે ઇરાદાપૂર્વક રાખવામાં આવે છે જો તે પછીથી જરૂર પડે તો કોડનો ઉપયોગ ફક્ત ડિબગીંગ માટે થાય છે. લેગસી કોડ એ છે જે એક સમયે ઉપયોગી હતો પરંતુ હવે તેનો ઉપયોગ થતો નથી અથવા તેની જરૂર નથી. પરંતુ પહોંચી ન શકાય તેવો કોડ જટિલ લાઈબ્રેરી, મોડ્યુલ અથવા રૂટિનનો ભાગ પણ હોઈ શકે છે જ્યાં તે અન્ય લોકો માટે ઉપયોગી છે અથવા એવી પરિસ્થિતિઓમાં કે જે કોઈ ચોક્કસ દૃશ્યમાં મળતું નથી. આવા શરતી રીતે પહોંચી ન શકાય તેવા કોડનું ઉદાહરણ કમ્પાઇલરની રનટાઇમ લાઇબ્રેરીમાં સામાન્ય સ્ટ્રિંગ ફોર્મેટિંગ ફંક્શનનું અમલીકરણ હોઈ શકે છે, જેમાં તમામ સંભવિત દલીલો પર પ્રક્રિયા કરવા માટે જટિલ કોડ હોય છે, જેમાંથી માત્ર એક નાનો સબસેટ ખરેખર ઉપયોગમાં લેવાય છે. કમ્પાઇલર્સ સામાન્ય રીતે સંકલન સમયે બિનઉપયોગી કોડ વિભાગોને દૂર કરી શકશે નહીં, કારણ કે વર્તન મોટે ભાગે રન ટાઇમ પર દલીલોના મૂલ્યો દ્વારા નક્કી થાય છે. ઉદાહરણો C કોડના આ ટુકડામાંઃ int fhoo (int X, int Y) {રીટર્ન X + Y; int Z = X * Y;} વ્યાખ્યા ક્યારેય પહોંચી શકાતી નથી કારણ કે કાર્ય હંમેશા તેની પહેલાં પાછું આવે છે. તેથી, સંગ્રહની ફાળવણી કરવાની કે પ્રારંભ કરવાની જરૂર નથી. ફેબ્રુઆરી 2014 થી એપલના એસએસએલ/ટીએલએસમાં એક મોટી સુરક્ષા ખામી હતી જે ઔપચારિક રીતે અને અનૌપચારિક રીતે "ગોટો ફેલ બગ" તરીકે ઓળખાય છે. સંબંધિત કોડનો ટુકડો છેઃ સ્ટેટિક OSStatus SLVerifyServerKeeExchange (SSLContext * ctx, bool isRsa, SSLBuffer સ્બાક્ષરિતપરામ, uint8 _ t * હસ્તાક્ષર, UInt16 હસ્તાક્ષર) {OSStatus err;. જો ((err = SSLHashSHA1.update (& hashCtx, & ServerRandom)! = 0) ગોટો નિષ્ફળ; જો (err = SSLHashSHA1.update (& hashCtx, & હસ્તાક્ષરિતપરામ)! = 0) ગોટો નિષ્ફળ; ગોટો નિષ્ફળ; જો (err = SSLHashSHA1.final ( સી ભાષાના વાક્યરચનામાં, બીજો બિનશરતી છે, અને તેથી હંમેશા કોલને SSLHashSHA1.final પર છોડી દે છે. પરિણામે, ભૂલ SHA1 સુધારા કામગીરીની સ્થિતિ જાળવી રાખશે, અને સહી ચકાસણી ક્યારેય નિષ્ફળ નહીં થાય. અહીં, પહોંચી ન શકાય તેવો કોડ એ અંતિમ કાર્ય માટે કૉલ છે. ક્લેંગ કમ્પાઇલરને વિકલ્પ સાથે લાગુ કરવું-દરેક વસ્તુમાં પહોંચી ન શકાય તેવું કોડ વિશ્લેષણ શામેલ છે, જે આ કોડ માટે ચેતવણીને ટ્રિગર કરશે. C + + માં, કેટલીક રચનાઓ અવ્યાખ્યાયિત વર્તન માટે નિર્દિષ્ટ કરવામાં આવે છે. કમ્પાઇલર કોઈપણ વર્તણૂકને અમલમાં મૂકવા માટે સ્વતંત્ર છે અથવા કંઈ નહીં, અને સામાન્ય રીતે ઓપ્ટિમાઇઝિંગ કમ્પાઇલર ધારશે કે કોડ પહોંચી શકાતો નથી. પહોંચી ન શકાય તેવા કોડનું વિશ્લેષણ શોધ એ કોડ શોધવા માટે નિયંત્રણ પ્રવાહ વિશ્લેષણનું એક સ્વરૂપ છે જે કોઈપણ સંભવિત પ્રોગ્રામ સ્થિતિમાં ક્યારેય પહોંચી શકાતું નથી. કેટલીક ભાષાઓમાં (દા. ત. જાવા) પહોંચી ન શકાય તેવા કોડના કેટલાક સ્વરૂપોને સ્પષ્ટપણે મંજૂરી નથી. જે ઓપ્ટિમાઇઝેશન પહોંચી ન શકાય તેવા કોડને દૂર કરે છે તેને ડેડ કોડ એલિમિનેશન તરીકે ઓળખવામાં આવે છે. ઓપ્ટિમાઇઝિંગ કમ્પાઇલર (દા. ત., સામાન્ય સબએક્સપ્રેશન નાબૂદી) દ્વારા કરવામાં આવેલા પરિવર્તનના પરિણામે કોડ પહોંચી ન શકાય તેવો બની શકે છે. વ્યવહારમાં વિશ્લેષણની અભિજાત્યપણુની પહોંચ ન હોય તેવા કોડની માત્રા પર નોંધપાત્ર અસર પડે છે. ઉદાહરણ તરીકે, સતત ફોલ્ડિંગ અને સરળ પ્રવાહ વિશ્લેષણ દર્શાવે છે કે નીચેના કોડમાં આઇએફ-સ્ટેટમેન્ટની અંદરનો ભાગ પહોંચી શકાતો નથીઃ પૂર્ણાંક એન = 2 + 1; જો (એન = = 4) {/* પહોંચી શકાતો નથી */} જો કે, નીચેના કોડમાં અનુરૂપ બ્લોક પહોંચી શકાતો નથી તે નક્કી કરવા માટે વધુ અભિજાત્યપણાની જરૂર છેઃ ડબલ એક્સ = એસક્યુઆરટી (2); જો (એક્સ> 5) {/* પહોંચી શકાતો નથી */} અપ્રાપ્ય કોડ નાબૂદી તકનીક ડેડ કોડ નાબૂદી અને બિનજરૂરી કોડ નાબૂદી જેવા ઓપ્ટિમાઇઝેશનના સમાન વર્ગમાં છે. અપ્રાપ્યતા વિ. પ્રોફાઇલિંગ કેટલાક કિસ્સાઓમાં, વ્યવહારુ અભિગમ સરળ અપ્રાપ્યતાના માપદંડ અને વધુ જટિલ કેસોને સંભાળવા માટે પ્રોફાઇલરનો ઉપયોગ હોઈ શકે છે. સામાન્ય રીતે રૂપરેખા કોડના ભાગની અપ્રાપ્યતા વિશે કંઈપણ સાબિત કરી શકતી નથી, પરંતુ સંભવિત અપ્રાપ્ય કોડ શોધવા માટે એક સારો અભ્યાસ હોઈ શકે છે. એકવાર કોડનો શંકાસ્પદ ભાગ મળી જાય પછી, અન્ય પદ્ધતિઓ, જેમ કે વધુ શક્તિશાળી કોડ વિશ્લેષણ સાધન, અથવા તો હાથ દ્વારા વિશ્લેષણ, તે નક્કી કરવા માટે ઉપયોગ કરી શકાય છે કે કોડ ખરેખર પહોંચી શકાતો નથી. કોડ કવરેજ રેડન્ડન્ટ કોડ ડેડ કોડ ઓક્સબો કોડ રેફરન્સ એપેલ, એ. ડબલ્યુ. 1998 મોડર્ન કમ્પાઇલર ઇમ્પ્લિમેન્ટેશન ઇન જાવા પણ જુઓ. કેમ્બ્રિજ યુનિવર્સિટી પ્રેસ. મચનિક એસ. એસ. 1997 એડવાન્સ્ડ કમ્પાઇલર ડિઝાઇન અને અમલીકરણ. મોર્ગન કૌફમૅન. કમ્પાઇલર ઓપ્ટિમાઇઝેશન સોફ્ટવેર વિસંગતતાઓ સોર્સ કોડ