Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में बाहरी "C" का क्या प्रभाव है?

बाहरी "सी" कीवर्ड का उपयोग सी ++ में फ़ंक्शन नाम बनाने के लिए किया जाता है जिसमें सी लिंकेज होता है। इस मामले में कंपाइलर फ़ंक्शन को मैनेज नहीं करता है। आइए पहले देखें कि C++ में मैंगलिंग क्या है, फिर हम बाहरी “C” कीवर्ड के बारे में चर्चा कर सकते हैं।

C++ में हम फंक्शन ओवरलोडिंग फीचर का उपयोग कर सकते हैं। इस फीचर का इस्तेमाल करके हम एक ही नाम से फंक्शन बना सकते हैं। अंतर केवल तर्कों के प्रकार और तर्कों की संख्या का है। वापसी प्रकार यहां नहीं माना जाता है। अब प्रश्न आता है कि C++ ऑब्जेक्ट कोड में अतिभारित कार्यों को कैसे अलग करता है?

ऑब्जेक्ट कोड में, यह तर्कों के बारे में जानकारी जोड़कर नाम बदलता है। यहां जिस तकनीक का प्रयोग किया जाता है, उसे नेम मैंगलिंग कहा जाता है। सी ++ में नाम मैंगलिंग के लिए कोई मानकीकृत तकनीक नहीं है। इसलिए अलग-अलग कंपाइलर अलग-अलग तकनीकों का इस्तेमाल करते हैं।

यहाँ नाम मैंगलिंग का एक उदाहरण है। अतिभारित कार्यों को func() नाम दिया गया है, और एक अन्य फ़ंक्शन my_function() है।

उदाहरण

int func(int x) {
   return x*x;
}
double func(double x) {
   return x*x;
}
void my_function(void) {
   int x = func(2); //integer
   double y = func(2.58); //double
}

कुछ C++ कंपाइलर इसे नीचे की तरह बदल देंगे -

उदाहरण

int __func_i(int x){
   return x*x;
}
double __func_d(double x){
   return x*x;
}
void __my_function_v(void){
   int x = __func_i(2); //integer
   double y = __func_d(2.58); //double
}

सी फ़ंक्शन ओवरलोडिंग का समर्थन नहीं करता है, इसलिए हमें यह सुनिश्चित करना होगा कि जब हम सी ++ में सी कोड लिंक करते हैं तो प्रतीक का नाम नहीं बदला जाता है। निम्नलिखित C++ कोड एक त्रुटि उत्पन्न करेगा।

उदाहरण

int printf(const char *format,...);
main() {
   printf("Hello World");
}

आउटपुट

undefined reference to `printf(char const*, ...)'
ld returned 1 exit status

यह समस्या इसलिए उत्पन्न हो रही है क्योंकि प्रिंटफ () का नाम कंपाइलर द्वारा बदल दिया गया है। और यह अद्यतन प्रिंटफ () फ़ंक्शन की परिभाषा नहीं ढूंढता है। इस समस्या को दूर करने के लिए हमें C++ में एक्सटर्नल “C” का प्रयोग करना होगा। जब इस ब्लॉक के अंदर कुछ कोड का उपयोग किया जाता है, तो C++ कंपाइलर सुनिश्चित करता है कि फ़ंक्शन का नाम अनमंगल है। इसलिए नाम नहीं बदला जाएगा। तो इस समस्या को हल करने के लिए उपरोक्त कोड इस तरह होगा।

उदाहरण

extern "C"{
   int printf(const char *format,...);
}
main() {
   printf("Hello World");
}

आउटपुट

Hello World

नोट: कोड के ये ब्लॉक अलग-अलग कंपाइलरों में अलग-अलग परिणाम उत्पन्न कर सकते हैं।

तो बाहरी "सी" मूल रूप से एक लिंकेज विनिर्देश है। प्रत्येक कंपाइलर में, हमें C लिंकेज को निर्दिष्ट करने के लिए इस कीवर्ड का उपयोग करना होता है। और एक और बात हमें ध्यान में रखनी होगी कि लिंकेज विनिर्देश नेमस्पेस स्कोप में होना चाहिए। कक्षा के सदस्यों को बाहरी "सी" से अनदेखा कर दिया जाता है


  1. सी ++ में बाहरी भंडारण वर्ग

    बाहरी भंडारण वर्ग विनिर्देशक आपको उन वस्तुओं को घोषित करने देता है जिनका उपयोग कई स्रोत फ़ाइलें कर सकती हैं। एक बाहरी घोषणा वर्णित चर को वर्तमान स्रोत फ़ाइल के अगले भाग द्वारा प्रयोग करने योग्य बनाती है। यह घोषणा परिभाषा को प्रतिस्थापित नहीं करती है। घोषणा का उपयोग बाहरी रूप से परिभाषित चर का वर्णन

  1. C++ में कॉन्स्टेबल कीवर्ड क्या है?

    हम एक चर को स्थिर घोषित करने के लिए const qualifier का उपयोग करते हैं। इसका मतलब है कि एक बार वेरिएबल को इनिशियलाइज़ करने के बाद हम वैल्यू को नहीं बदल सकते। कॉन्स्ट का इस्तेमाल करने से बहुत बड़ा फायदा होता है। उदाहरण के लिए, यदि आपके पास PI के मान जैसा स्थिर मान है, तो आप उस मान को संशोधित करने के ल

  1. C++ सीखने के लिए अच्छे संसाधन क्या हैं?

    वेब पर ऐसे कई संसाधन हैं जो C++ सीखने में आपकी सहायता कर सकते हैं। मैंने आपको C++ सीखने के लिए कुछ बेहतरीन संसाधनों की एक संकलित सूची देने की कोशिश की है - सी++ - C++ सीखने के लिए यह एक बेहतरीन जगह है क्योंकि इसमें C++ के लगभग सभी बुनियादी और मध्यवर्ती विषयों को गहराई से शामिल किया गया है और कुल मि