কিছু অ্যাপ্লিকেশনে, আমরা দেখেছি যে কিছু ফাংশন অন্য ফাংশনের ভিতরে ঘোষণা করা হয়। এটি কখনও কখনও নেস্টেড ফাংশন হিসাবে পরিচিত হয়, কিন্তু আসলে এটি নেস্টেড ফাংশন নয়। একে বলা হয় আভিধানিক স্কোপিং। লেক্সিক্যাল স্কোপিং সি-তে বৈধ নয় কারণ কম্পাইলার অভ্যন্তরীণ ফাংশনের সঠিক মেমরি অবস্থানে পৌঁছাতে অক্ষম৷
নেস্টেড ফাংশন সংজ্ঞা পার্শ্ববর্তী ব্লকের স্থানীয় ভেরিয়েবল অ্যাক্সেস করতে পারে না। তারা শুধুমাত্র গ্লোবাল ভেরিয়েবল অ্যাক্সেস করতে পারে। সি-তে স্থানীয় এবং বিশ্বব্যাপী দুটি নেস্টেড স্কোপ রয়েছে। তাই নেস্টেড ফাংশনের কিছু সীমিত ব্যবহার আছে। আমরা যদি নীচের মত নেস্টেড ফাংশন তৈরি করতে চাই, এটি ত্রুটি তৈরি করবে।
উদাহরণ
#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'
কিন্তু GNU C কম্পাইলারের একটি এক্সটেনশন নেস্টেড ফাংশন ঘোষণা করার অনুমতি দেয়। এর জন্য আমাদের নেস্টেড ফাংশন ঘোষণার আগে অটো কীওয়ার্ড যোগ করতে হবে।
উদাহরণ
#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