2010-10-27 21 views
9

फ़ंक्शन तर्क दाएं से बाएं क्रम में स्टैक पर क्यों धक्का दिए जाते हैं?फ़ंक्शन तर्क पुश ऑर्डर

+0

@ कुछ प्लेटफ़ॉर्म (एआरएम और पावरपीसी) कुछ कार्यों को रजिस्टरों में धक्का देते हैं और वे कभी भी ढेर पर दिखाई नहीं दे सकते हैं। – doron

उत्तर

15

प्रिंटफ की तरह परिवर्तनीय संख्या के साथ कार्यों के अस्तित्व को सक्षम करने के लिए। फ़ंक्शन पहले एक या दो तर्क निकाल सकता है और फिर स्टैक पर तर्कों की कुल संख्या को कम करने के लिए अपने मानों का उपयोग कर सकता है।

+9

मुझे यह उल्लेख करना चाहिए कि सी मानक में कुछ भी नहीं है जिसके लिए इसकी आवश्यकता है (वास्तव में, मुझे नहीं लगता कि यह भी एक स्टैक _ _ququires_ है)। आप उन्हें अन्य क्रम में आसानी से धक्का दे सकते हैं, इसके बाद आप पहली बार पा सकते हैं (मस्तिष्क-मृत हालांकि कार्यान्वयन होगा)। इसे अपने उत्तर की आलोचना के रूप में न लें क्योंकि आप सही मर चुके हैं। + 1. – paxdiablo

+0

रजिस्ट्रारों में तर्कों की संख्या पारित की जा सकती है, और यहां तक ​​कि सामान्य पैरामीटर भी रजिस्टरों में पास किए जा सकते हैं। या आप पैरामीटर के बावजूद आखिरी गिनती को धक्का दे सकते हैं। इसलिए इससे कोई फर्क नहीं पड़ता कि आप किस क्रम का उपयोग करते हैं –

8

एकमात्र कारण वैरैडिक फ़ंक्शंस के लिए है: स्टैक से पॉप किए गए पहले तर्क फ़ंक्शन के लिए "ज्ञात" हैं, और यह उनसे निर्धारित कर सकता है कि इसे स्टैक से कितने अन्य तर्क पढ़ना चाहिए।

ध्यान दें कि, यह ठीक काम करने के लिए, इस तरह के कॉलिंग सम्मेलनों में स्टैक क्लीनअप कॉलर को छोड़ दिया जाता है, जो जानता है कि यह स्टैक पर कितने तर्कों को धक्का देता है। यह कैली-क्लीनअप की तुलना में थोड़ा कम कुशल है, क्योंकि प्रत्येक फ़ंक्शन कॉल के बाद क्लीनअप कोड लिखा जाना चाहिए, जबकि उन सम्मेलनों को कॉल करने में जो भिन्न कार्यों को अनुमति नहीं देते हैं, इसे प्रत्येक फ़ंक्शन के अंत में एम्बेड किया जा सकता है।

इसके अलावा, कोई विशेष कारण नहीं है, तथ्यों में कई कॉलिंग सम्मेलन (उदा। Pascal, Borland Fastcall) हैं जो चरम कार्यों को स्वीकार नहीं करते हैं और दाईं ओर बाएं पैरामीटर को धक्का देते हैं।

+0

आप बाएं से दाएं धक्का दे सकते हैं और तर्कों की संख्या को दबा सकते हैं, यह अलग नहीं है –

संबंधित मुद्दे