Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

ฟังก์ชันซ้อนใน C


ในบางแอปพลิเคชัน เราพบว่ามีการประกาศฟังก์ชันบางอย่างภายในฟังก์ชันอื่น บางครั้งเรียกว่าฟังก์ชันที่ซ้อนกัน แต่จริงๆ แล้ว นี่ไม่ใช่ฟังก์ชันที่ซ้อนกัน สิ่งนี้เรียกว่าการกำหนดขอบเขตคำศัพท์ การกำหนดขอบเขตคำศัพท์ไม่ถูกต้องใน C เนื่องจากคอมไพเลอร์ไม่สามารถเข้าถึงตำแหน่งหน่วยความจำที่ถูกต้องของฟังก์ชันภายในได้

คำจำกัดความของฟังก์ชันที่ซ้อนกันไม่สามารถเข้าถึงตัวแปรในเครื่องของบล็อกรอบข้างได้ พวกเขาสามารถเข้าถึงตัวแปรส่วนกลางเท่านั้น ใน 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'

แต่ส่วนขยายของคอมไพเลอร์ 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