कुछ अनुप्रयोगों में, हमने देखा है कि कुछ फ़ंक्शन दूसरे फ़ंक्शन के अंदर घोषित किए जाते हैं। इसे कभी-कभी नेस्टेड फ़ंक्शन के रूप में जाना जाता है, लेकिन वास्तव में यह नेस्टेड फ़ंक्शन नहीं है। इसे लेक्सिकल स्कोपिंग कहा जाता है। लेक्सिकल स्कोपिंग C में मान्य नहीं है क्योंकि कंपाइलर इनर फंक्शन की सही मेमोरी लोकेशन तक पहुंचने में असमर्थ है।
नेस्टेड फ़ंक्शन परिभाषाएँ आसपास के ब्लॉकों के स्थानीय चरों तक नहीं पहुँच सकती हैं। वे केवल वैश्विक चरों तक पहुँच सकते हैं। सी में स्थानीय और वैश्विक दो नेस्टेड स्कोप हैं। तो नेस्टेड फ़ंक्शन का कुछ सीमित उपयोग होता है। अगर हम नीचे की तरह नेस्टेड फ़ंक्शन बनाना चाहते हैं, तो यह त्रुटि उत्पन्न करेगा।
उदाहरण
#include <stdio.h> main(void) { printf("Main Function"); int my_fun() { printf("my_fun function"); // defining another function inside the first function. int my_fun2() { printf("my_fun2 is inner function"); } } my_fun2(); }
आउटपुट
text.c:(.text+0x1a): undefined reference to `my_fun2'
लेकिन जीएनयू सी कंपाइलर का विस्तार नेस्टेड फ़ंक्शन की घोषणा की अनुमति देता है। इसके लिए हमें नेस्टेड फ़ंक्शन की घोषणा से पहले ऑटो कीवर्ड जोड़ना होगा।
उदाहरण
#include <stdio.h> main(void) { auto int my_fun(); my_fun(); printf("Main Function\n"); int my_fun() { printf("my_fun function\n"); } printf("Done"); }
आउटपुट
my_fun function Main Function Done