2013-03-31 9 views
7

सी cdecl का उपयोग करता है, जिसे मैंने देखा है और असेंबली से बुलाया है। यह काफी अच्छा लगता है, तो संगतता तोड़ क्यों? एक और सम्मेलन की आवश्यकता क्यों थी?क्यों कंपाइलर "जीसी" सी से अलग कॉलिंग सम्मेलन का उपयोग करता है?

+0

गो एकाधिक रिटर्न वैल्यू और जीसी सेगमेंट स्टैक्स का उपयोग करता है। मुझे पूरी तरह से यकीन नहीं है, लेकिन अगर यह सुविधाएं कॉलिंग सम्मेलनों से संबंधित हैं तो मुझे आश्चर्य नहीं होगा। अफैक, सीडीसीएल के साथ कई मूल्यों को वापस करने का एकमात्र तरीका एक सूचक को संरचना में वापस करना है। –

+6

सी सीडीईसी कॉलिंग सम्मेलन का उपयोग नहीं करता है। कुछ कार्यान्वयन इसका उपयोग करते हैं, और कुछ अन्य कॉलिंग सम्मेलनों का उपयोग करते हैं। – nos

+0

AFAIK Google के कार्यान्वयन का उपयोग एक कॉलिंग कन्वेंशन का उपयोग करता है जो सी के बराबर है, जहां उन जगहों को छोड़कर जहां सी अवधारणा व्यक्त नहीं कर सकता है गो उपयोग (जैसे कि जब कई रिटर्न मान होते हैं) – fuz

उत्तर

5

क्योंकि एक ही कॉलिंग सम्मेलन में कोई फायदा नहीं है। कॉल कोड और सी कोड एक-दूसरे को सीधे कॉल नहीं कर सकते हैं, भले ही कॉलिंग कन्वेंशन समान होगा क्योंकि गो स्प्लिट स्टैक्स का उपयोग करता है।

ओटीओएच, यह gccgo में समझ में आता है, क्योंकि जीसीसी कुछ आर्किटेक्चर के लिए सी स्प्लिट स्टैक का समर्थन करता है। और, आईआईआरसी, कॉलिंग सम्मेलन उस संगत के कारण है। (अधिक details here।)

अस्वीकरण: मैंने वास्तव में कभी भी gccgo का उपयोग नहीं किया था।

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

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