일부 응용 프로그램에서 일부 함수가 다른 함수 내부에서 선언되는 것을 보았습니다. 이것을 중첩 함수라고도 하지만 실제로는 중첩 함수가 아닙니다. 이를 어휘 범위 지정이라고 합니다. 컴파일러가 내부 함수의 정확한 메모리 위치에 도달할 수 없기 때문에 어휘 범위 지정은 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