c - Why and how does GCC compile a function with a missing return statement? -
#include & lt; stdio.h & gt; चार toUpper (चार); इंट मुख्य (रिक्त) {चार च, सी 2; Printf ("लोअरकेस इनपुट:"); च = मिलना (); Ch2 = toupper (ch); Printf ("% c == & gt;% c \ n", ch, ch2); वापसी 0; } चार toUpper (char c) {if (सी & gt; = 'ए' और & amp; सी & lt; = 'z') सी = सी - 32; } ToUpper फ़ंक्शन में, वापसी प्रकार चार होता है, लेकिन toupper () में "वापसी" नहीं है। और जीसीसी (जीसीसी) 4.5.1 20100924 (रेड हैट 4.5.1-4), फीडोरा -14 के साथ स्रोत कोड को संकलित करें।
बेशक, चेतावनी जारी की जाती है: "चेतावनी: नियंत्रण गैर के अंत तक पहुँच जाता है -विद समारोह ", लेकिन, अच्छी तरह से काम कर रहा है।
जीसीसी के संकलन के दौरान उस कोड में क्या हुआ है? मैं इस मामले में एक ठोस उत्तर प्राप्त करना चाहता हूं। धन्यवाद:)
आपके लिए क्या हुआ है कि जब सी प्रोग्राम को असेंबली भाषा में संकलित किया गया था, तो आपके toupper फ़ंक्शन इस तरह समाप्त हो गया है, शायद:
_toUpper: LFB4: पुशक% आरबीपी एलसीएफ 3: मूविक% आरएसपी,% आरबीपी एलसीएफआई 4: मोबब% दिल, -4 (% आरबीपी) सीएमपीबी $ 96, -4 (% आरबीपी) जेले एल 8 सीएमपीबी $ 122, -4 (% आरबीपी) जेजी एल 8 मोजेब्ले -4 (% आरबीपी),% ईएक्स शुउल $ 32,% एएक्स मोबब% अल, -4 (% आरबीपी) एल 8: रिटाइट रेट 32 का घटाव% eax रजिस्टर में किया गया था। और x86 कॉलिंग सम्मेलन में, यह वह रजिस्टर है जिसमें रिटर्न वैल्यू होने की उम्मीद है! तो ... आपको भाग्यशाली मिला है।
लेकिन कृपया चेतावनियों पर ध्यान दें। वे किसी कारण के लिए हैं!
Comments
Post a Comment