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 में सूचीबद्ध हैं, यहां एक संक्षिप्त सारांश है (एक्सटर्न "सी" पर जोर देने के साथ):

  • extern "सी" एक लिंक-विनिर्देश है
  • प्रत्येक संकलक आवश्यक को "सी" लिंक प्रदान करने के लिए
  • एक लिंकेज विनिर्देश केवल नाम स्थान के क्षेत्र में होगा
  • सभी फ़ंक्शन प्रकार, फ़ंक्शन के नाम और चर नामों में एक भाषा लिंकेज है केवल बाहरी नाम के साथ कार्य नाम और चर नाम
  • एक भाषा लिंकेज है
  • अलग-अलग भाषा संबंधों के साथ दो फ़ंक्शन प्रकार अलग-अलग प्रकार के होते हैं, भले ही अन्यथा समान
  • लिंकिंग चश्मा घोंसला, आंतरिक एक अंतिम लिंकेज को निर्धारित करता है
  • extern
  • extern "c" बलों को एक विशेष नाम के साथ सबसे अधिक एक समारोह में "सी" लिंक हो सकता है (नाम स्थान की परवाह किए बिना)
  • "सी" बाहरी लिंक करने के लिए फ़ंक्शन (यह स्थिर नहीं बना सकता) रिवर को देखें डी की टिप्पणी: 'बाहरी' के अंदर 'स्थिर' 'सी' 'मान्य है; इस प्रकार घोषित एक इकाई में आंतरिक संबंध है, और इसलिए एक भाषा का संबंध नहीं है
  • अन्य भाषाओं में परिभाषित वस्तुओं और सी + + में परिभाषित वस्तुओं को सी ++ से लिंक करने के लिए अन्य भाषाओं से कार्यान्वयन-परिभाषित और भाषा-निर्भर है केवल जहां दो भाषा क्रियान्वयन के ऑब्जेक्ट लेआउट स्ट्रैटेजी समान हैं, ऐसा ही किया जा सकता है

  • Comments

    Popular posts from this blog

    c++ - Linux and clipboard -

    What is expire header and how to achive them in ASP.NET and PHP? -

    sql server - How can I determine which of my SQL 2005 statistics are unused? -