ओपी राज्यों कोड अनुभवी संकलक इंजीनियरों द्वारा लिखा गया था के बाद से, यह संभव है इस कोड के इरादे है:
*(int32 *) 0 = 0;
कोड के रूप में इस विशिष्ट सी कार्यान्वयन का कारण बनता है कि व्यवहार द्वारा परिभाषित नहीं द्वारा मान्यता प्राप्त है सी मानक और इस कार्यान्वयन के लिए अवैध होने के लिए जाना जाता है।
for (;;)
अतिरिक्त रूप से इंगित करता है कि यह कोड कभी बाहर नहीं निकला है।
- कंपाइलर इंजीनियरों को पता है कि अनुकूलक इस कोड को पहचान लेगा और यह समझ जाएगा कि इसे "अनुकूलित किया जा सकता है", क्योंकि इस कोड तक पहुंचने वाला कोई भी प्रोग्राम किसी भी व्यवहार की अनुमति देता है, इसलिए अनुकूलक इसे व्यवहार देने का विकल्प चुन सकता है अगर कोड कभी नहीं पहुंचा है। यदि आप एक सी कार्यान्वयन के आंतरिक आपरेशन के विशिष्ट ज्ञान
तर्क इस तरह की संभव केवल है। यह एक प्रकार का कंपाइलर इंजीनियर हो सकता है सी कार्यान्वयन के लिए विशेष शीर्षलेखों में शामिल हो सकता है, शायद उस निश्चित कोड को चिह्नित करने के लिए (जैसे abort
कॉल के बाद कोड) कभी नहीं पहुंचता है। इसे सामान्य प्रोग्रामिंग में कभी भी इस्तेमाल नहीं किया जाना चाहिए।
उदाहरण के लिए, इस कोड पर विचार करें:
if (a)
for (;;)
*(int 32 *) 0 = 0;
else
foo();
संकलक को पहचान सकते हैं कि तब-खंड किसी भी व्यवहार के लिए अनुमति दी है। इसलिए, संकलक यह चुनने के लिए स्वतंत्र है कि इसका क्या व्यवहार है। सादगी के लिए, यह foo();
के समान व्यवहार करने के लिए चुनता है। फिर कोड हो जाता है:
if (a)
foo();
else
foo();
और आगे के लिए सरल किया जा सकता:
foo();
स्रोत
2013-08-23 17:56:34
यह एक अनंत लूप है जो शून्य के 4 बाइट्स को 0-3 स्थानों में संग्रहीत करता है। यह एक जानबूझकर गर्भपात या जानबूझकर लटका की तरह दिखता है। –
@ हाबीब हां संभोग मुझे पता है कि '(;;)' एक अनंत लूप है। नीचे का टुकड़ा वह है जिसे मैं समझ नहीं पा रहा हूं। अस्पष्टता के लिए खेद है। – NlightNFotis
@ कर्टिस मुझे नहीं लगता कि यह एक बुरी बात है। यह अनुभवी कंपाइलर इंजीनियरों द्वारा लिखा गया है, और यह एक कारण के लिए होना चाहिए। कुछ गलत होने के मामले में असामान्य निष्पादन एक व्यावहारिक कारण की तरह लगता है, अब तक जवाब दिए गए हैं। – NlightNFotis