[c언어] 함수 포인터와 익명 함수

C언어는 함수 포인터와 익명 함수(람다 함수)를 사용하여 다양한 기능을 구현할 수 있습니다. 이 글에서는 C언어에서 함수 포인터와 익명 함수를 사용하는 방법에 대해 알아보겠습니다.

함수 포인터란 무엇인가요?

함수 포인터는 함수의 주소를 저장하는 변수입니다. 함수 포인터를 사용하면 다른 함수를 가리키거나 호출할 수 있습니다.

예를 들어, 다음은 정수를 두 개 입력받아 더한 값을 반환하는 add 함수와 해당 함수를 가리키는 함수 포인터를 선언하는 예제 코드입니다.

#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int main() {
    int (*ptr)(int, int); // 함수 포인터 선언
    ptr = add; // 함수 포인터에 add 함수의 주소 할당

    int result = ptr(2, 3); // 함수 포인터를 사용하여 add 함수 호출
    printf("결과: %d\n", result);

    return 0;
}

위 코드에서 ptr이라는 함수 포인터를 선언하고, add 함수의 주소를 할당한 후에 해당 함수 포인터를 사용하여 add 함수를 호출했습니다.

익명 함수란 무엇인가요?

C언어에는 공식적으로 람다 함수를 지원하지는 않지만, 함수 포인터를 사용하여 익명 함수와 비슷한 동작을 구현할 수 있습니다.

다음은 익명 함수와 비슷한 역할을 하는 함수 포인터를 사용하여 두 정수를 더하는 예제 코드입니다.

#include <stdio.h>

int main() {
    int (*add)(int, int) =  // 익명 함수 역할을 하는 함수 포인터 정의
        [](int a, int b) -> int {
            return a + b;
        };

    int result = add(2, 3);  // 함수 포인터를 사용하여 익명 함수 호출
    printf("결과: %d\n", result);

    return 0;
}

위 코드에서는 add 함수 포인터를 이용하여 익명의 함수를 정의하고, 이를 사용하여 두 정수를 더하는 과정을 보여줍니다.

정리

C언어에서 함수 포인터와 익명 함수(람다 함수)를 사용하면 코드의 유연성을 높일 수 있습니다. 이를 통해 다양한 기능을 구현하고, 코드 재사용성을 높일 수 있습니다. 함수 포인터와 익명 함수를 적절히 활용하여 프로그램의 가독성과 유지보수성을 향상시킬 수 있습니다.

위에서 소개된 기능들은 C언어의 표준에 포함되지 않은 확장 기능일 수 있으므로, 사용 전에 관련 문서를 참고하시기 바랍니다.

참고 자료: C언어 함수 포인터와 람다