Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C 언어의 __func__ 식별자 완벽 정리

C의 __func__ 식별자란?

C 언어에는 현재 실행 중인 함수의 이름을 문자열로 얻을 수 있는 __func__라는 사전 정의된 식별자가 있습니다. 이는 디버깅이나 로깅 작업 시 매우 유용하게 활용됩니다.

일부 구버전의 C 및 C++ 컴파일러에서는 __FUNCTION__이라는 매크로로 동일한 기능을 제공하기도 했습니다. __func__는 C99 표준부터 공식적으로 도입되었으며, 함수 본문 내에서 해당 함수의 이름을 담고 있는 정적 문자열처럼 동작합니다.

참고로 __func__는 매크로가 아니라 식별자(identifier)라는 점에 유의해야 합니다. 컴파일러가 자동으로 각 함수의 시작 부분에 마치 다음과 같은 선언이 있는 것처럼 처리합니다.

static const char __func__[] = "함수이름";

예제 코드

다음 예제를 통해 __func__가 어떻게 동작하는지 확인할 수 있습니다.

#include <stdio.h>

void TestFunction() {
    printf("__func__ 출력 결과: %s\n", __func__);
}

int main() {
    printf("__func__ 출력 결과: %s\n", __func__);
    TestFunction();
    return 0;
}

실행 결과

__func__ 출력 결과: main
__func__ 출력 결과: TestFunction

위 출력에서 볼 수 있듯이, main 함수 안에서 사용하면 "main"이, TestFunction 안에서 사용하면 "TestFunction"이 출력됩니다. 즉, __func__는 코드가 위치한 함수의 이름을 자동으로 반환합니다.

주요 활용 사례

__func__는 주로 다음과 같은 상황에서 활용됩니다.

  • 디버깅 로그: 오류 발생 위치를 추적할 때 어떤 함수에서 문제가 생겼는지 기록
  • 추적(Tracing): 프로그램 실행 흐름을 파악하기 위해 함수 진입 및 종료 지점 기록
  • 오류 메시지 생성: 예외나 에러 보고 시 함수 이름을 자동으로 포함하여 가독성 향상

또한 C++11부터는 __func__가 표준으로 채택되었으며, GCC 등 일부 컴파일러는 __FUNCTION__이나 함수 시그니처까지 포함하는 __PRETTY_FUNCTION__ 같은 확장 기능도 추가로 제공합니다.