본문 바로가기
3. 개발 관련/공부 :: c

function nesting in C (GNU C)

by kyuho.choi 2023. 4. 28.
728x90
반응형

function in funcion, declare a function in function, nested function 등등

아마도 정확한 표현이 nested function 일 것 같긴하다.

(참조 : https://en.wikipedia.org/wiki/Nested_function)

 

업무 특성상 gcc 기반 환경에서 주로 개발을 하니 사용 가능한 부분이다. C99 등 표준 C 에서는 지원하지 않는 기능이다.

함수 중첩(함수 내에서 다른 함수의 선언/구현/호출) 기능은 거의 사용할 일이 없긴한데, 효율적으로 적용하면 이로울 부분도 있을 듯 한다.

 

간략한 사용 예는 다음과 같다.

#include <stdio.h>

int main() { // main 함수

    int a = 5;
    int b = 6;
    
    int sum(int , int) { // 중첩 함수, 함수 내에 다른 함수의 선언
        return a + b;
    }
    
	printf("Hello C");
    printf("%d\n",sum(a,b); // 중첩 함수 호출
           
	return 0;
}

C99 환경에서 build 시 아래와 같다.

실행 중 오류가 발생했습니다.
/solution0.c:8:22: error: function definition is not allowed here
int sum(int,int) {
^
/solution0.c:13:19: warning: implicit declaration of function 'sum' is invalid in C99 [-Wimplicit-function-declaration]
printf("%d\n",sum(a,b));
^
1 warning and 1 error generated.

 

pros 라면,

별도의 function arg 복사가 필요 없다. 해당 scope 내에서 다루는 다른 변수 등에 직접 접근이 가능하니 stack usage 에 장점을 가져올 것 이고, scope 내에서만 사용 가능하여 다른 코드 내에서 해당 함수가 호출되는 경우를 제한 할 수 있다(주로 link/load 된 다른 lib 의 무분별한 호출 제한 용도). 추가적으로는 하나의 함수의 사이즈가 클 경우 가독성 증가를 위해 고려할 수 있다.

                  

cons 라면,

C 표준에서 지원하지 않는 기능이라는 것이 가장 큰 disadvantage 라 할 수 있다. gcc 기반 환경이라면 문제 없지만, 만약에라도 다른 플랫폼/다른 환경으로 porting 해야 한다면? 그럴 경우엔 inline function 을 사용하는 게 차라리 낫지 않나 싶기도 하다. scope 의 제한이라는 게 장점이 될 수도 있고, 반대도 될 수 있기 때문이다.

728x90
반응형

댓글