Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

सी ++ में नाम मैंगलिंग और बाहरी "सी"

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

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


  1. सी ++ में हटाएं () और मुफ्त ()

    हटाएं () डिलीट ऑपरेटर का उपयोग मेमोरी को डीलोकेट करने के लिए किया जाता है। उपयोगकर्ता को इस डिलीट ऑपरेटर द्वारा बनाए गए पॉइंटर वेरिएबल को डीलोकेट करने का विशेषाधिकार है। यहाँ C++ भाषा में डिलीट ऑपरेटर का सिंटैक्स दिया गया है, delete pointer_variable; आबंटित मेमोरी के ब्लॉक को हटाने के लिए सिंटैक्

  1. सी ++ और सी # के बीच अंतर

    C++ एक सांख्यिकीय रूप से टाइप की गई, संकलित, सामान्य-उद्देश्य, केस-संवेदी, फ्री-फॉर्म प्रोग्रामिंग भाषा है जो प्रक्रियात्मक, वस्तु-उन्मुख और सामान्य प्रोग्रामिंग का समर्थन करती है। C++ को एक मध्य-स्तरीय भाषा के रूप में माना जाता है, क्योंकि इसमें उच्च-स्तरीय और निम्न-स्तरीय भाषा सुविधाओं दोनों का स

  1. सी ++ और सी # में फ़ोरैच

    C++ में Foreach C++ 11 ने प्रत्येक तत्व को पार करने के लिए फ़ोरैच लूप पेश किया। यहाँ एक उदाहरण है - उदाहरण #include <iostream> using namespace std; int main() {    int myArr[] = { 99, 15, 67 };    // foreach loop    for (int ele : myArr)    cout <&