In C++ source, what is the effect of extern "C"? -
क्या वास्तव में extern "c"
को C ++ कोड में डालता है?
उदाहरण के लिए:
extern "c" {void foo (); }
extern "सी" एक फ़ंक्शन-नाम को सी ++ में बनाता है 'सी' लिंक (संकलक नाम को उलझाना नहीं है) ताकि क्लाइंट सी कोड आपके फ़ंक्शन का केवल घोषणा वाले 'C' संगत हेडर फाइल का उपयोग करके आपके फ़ंक्शन के साथ (यानी उपयोग) को लिंक कर सके। आपकी फ़ंक्शन परिभाषा एक बाइनरी प्रारूप में समाहित है (जो आपके सी ++ कंपाइलर द्वारा संकलित की गई थी) कि ग्राहक 'सी' लिंकर तब 'सी' नाम का उपयोग करने के लिए लिंक करेगा।
चूंकि सी ++ फ़ंक्शन के नामों से अधिक भार है और सी नहीं है, सी ++ कंपाइलर फ़ंक्शन नाम को एक विशिष्ट आईडी के रूप में लिंक करने के लिए उपयोग नहीं कर सकता है, इसलिए यह तर्कों के बारे में जानकारी जोड़कर नाम को उलझा कर सकता है। एसी कंपाइलर को नाम उलझाने की ज़रूरत नहीं है क्योंकि आप सी में फ़ंक्शन के नाम को ओवरलोड नहीं कर सकते हैं। जब आप कहते हैं कि फ़ंक्शन C ++ में "C" लिंकेज है, तो C ++ कंपाइलर तर्क / पैरामीटर प्रकार की जानकारी को उस नाम के लिए नहीं जोड़ता है लिंकेज।
बस आप जानते हैं, आप स्पष्ट रूप से प्रत्येक व्यक्तिगत घोषणा / परिभाषा को "सी" लिंकेज निर्दिष्ट कर सकते हैं या किसी लिंक का उपयोग करने के लिए घोषणाओं / परिभाषाओं के अनुक्रम को समूहित करने के लिए किसी ब्लॉक का उपयोग कर सकते हैं:
बाह्य "सी" शून्य foo (int); Extern "सी" {शून्य जी (चार); Int i; }
यदि आप तकनीकी के बारे में ध्यान रखते हैं, तो वे सी ++ 03 मानक के अनुभाग 7.5 में सूचीबद्ध हैं, यहां एक संक्षिप्त सारांश है (एक्सटर्न "सी" पर जोर देने के साथ): >
Comments
Post a Comment