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 컴파일러의 확장은 중첩 함수의 선언을 허용합니다. 이를 위해 중첩 함수 선언 전에 auto 키워드를 추가해야 합니다.

예시

#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