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

C में नेस्टेड फंक्शन्स


C मानक में नेस्टेड फंक्शन्स (एक फंक्शन के अंदर दूसरा फंक्शन परिभाषित करना) समर्थित नहीं हैं। इसे लेक्सिकल स्कोपिंग कहते हैं, लेकिन C कंपाइलर आंतरिक फंक्शन की सही मेमोरी लोकेशन तक नहीं पहुंच पाता।

समस्या

#include <stdio.h>

int main(void) {
    printf("Main Function");
    int my_fun() {
        printf("my_fun function");
        int my_fun2() {  // नेस्टेड फंक्शन
            printf("my_fun2 is inner function");
        }
    }
    my_fun2();  // एरर: undefined reference to 'my_fun2'
    return 0;
}

आउटपुट (एरर)

text.c:(.text+0x1a): undefined reference to `my_fun2'

GNU C एक्सटेंशन (non-standard)

GCC कंपाइलर auto कीवर्ड के साथ नेस्टेड फंक्शन घोषणा की अनुमति देता है (केवल GNU एक्सटेंशन के रूप में)।

#include <stdio.h>

int main(void) {
    auto int my_fun();  // फॉरवर्ड डिक्लेरेशन
    my_fun();
    printf("Main Function\n");
    
    int my_fun() {  // डेफिनिशन
        printf("my_fun function\n");
    }
    printf("Done");
    return 0;
}

आउटपुट

my_fun function
Main Function
Done

महत्वपूर्ण बिंदु

  • स्टैंडर्ड C (C99, C11, C18) में नेस्टेड फंक्शन्स अवैध हैं।
  • GCC का auto एक्सटेंशन पोर्टेबल नहीं है।
  • नेस्टेड फंक्शन्स केवल ग्लोबल वेरिएबल्स एक्सेस कर सकते हैं, बाहरी फंक्शन के लोकल वेरिएबल्स नहीं।
  • विकल्प: फंक्शन पॉइंटर्स, स्ट्रक्चर्स में फंक्शन पॉइंटर्स, या अलग फंक्शन्स उपयोग करें।
  1. JavaScript कॉलबैक फंक्शन: परिभाषा और उदाहरण JavaScript कॉलबैक फंक्शन: परिभाषा और उदाहरण

    JavaScript में, चूंकि फंक्शन ऑब्जेक्ट होते हैं, इसलिए हम उन्हें दूसरे फंक्शन में पैरामीटर के रूप में पास कर सकते हैं। इन फंक्शन को फिर दूसरे फंक्शन के अंदर कॉल किया जा सकता है, और पास किए गए फंक्शन को कॉलबैक फंक्शन कहा जाता है। उदाहरण { add(4, 5, multiplyResultByTwo); }); </scrip

  1. JavaScript में संक्षिप्त एरो फंक्शन्स (Concise Arrow Functions) JavaScript में संक्षिप्त एरो फंक्शन्स (Concise Arrow Functions)

    संक्षिप्त एरो फंक्शन सिंटैक्स निम्नलिखिक है:(param1, param2) =>param1+param2इसमें function कीवर्ड और फंक्शन बॉडी नहीं होती। पैरामीटर्स और फंक्शन बॉडी के बीच केवल => होता है और यदि सिंगल पैरामीटर है तो इसे इस तरह भी लिखा जा सकता है:param1=>param1*2यदि => के बाद कर्ली ब्रेसेस {} नहीं हैं त

  1. जावास्क्रिप्ट में फर्स्ट-क्लास फ़ंक्शन जावास्क्रिप्ट में फर्स्ट-क्लास फ़ंक्शन

    जावास्क्रिप्ट फ़ंक्शन्स को ऑब्जेक्ट्स की तरह ट्रीट करता है और हमें फ़ंक्शन्स को दूसरे फ़ंक्शन में पैरामीटर के रूप में पास करने और यहां तक कि अन्य फ़ंक्शन्स से फ़ंक्शन्स लौटाने की अनुमति देता है। जावास्क्रिप्ट में फ़ंक्शन्स फर्स्ट-क्लास फ़ंक्शन्स होते हैं, अर्थात हम उन्हें वेरिएबल्स, ऑब्जेक्ट्स और ऐ