반응형
작성일: 2025년 1월 8일

 

 

로그 함수를 사용하다보면, __FILE__, __LINE__ 같은 내용을 반복적으로 입력하게 된다.

타이핑치는 입장에서는 귀찮고, 코드를 읽는 입장에서는 사족 같은 느낌이 든다.

그렇다고 __FILE__, __LINE__ 같은 내용이 필요없는 내용은 아니다. 이런 정보가 디버깅할 때는 아주 중요한 단서를 제공한다.

 

가변 인자 매크로(__VA_ARGS__)를 이용하면, __FILE__, __LINE__ 같은 반복되는 내용을 줄일 수 있다.

아래 예시를 보면, 딱 느낌이 올 것이다.

 

#include <stdio.h>
#include <stdarg.h>

// __VA_ARGS__ 매크로 상수를 사용
#define MYLOG(...) mylog(__FILE__, __LINE__, __VA_ARGS__)

void mylog(char * file, int line, char * format, ...)
{
    fprintf(stdout, "(%s:%d) ", file, line);

    va_list args;
    va_start(args, format);
    vfprintf(stdout, format, args);
    va_end(args);

    return ;
}


int main()
{
    // 테스트 변수
    int num_a = 1;
    char str_a[16] = "AAA";

    // log 함수 사용 예시
    mylog(__FILE__, __LINE__, "This is first log.  num_a:%d  str_a:%s\n", num_a, str_a);

    // Log Macro 사용 예시
    // __FILE__, __LINE__ 을 사용하지 않았지만, MYLOG 매크로를 이용하여 file name과 line 정보를 출력함.
    MYLOG("This is second log.  num_a:%d  str_a:%s\n", num_a, str_a);
    return 0;
}

 

 

위 소스코드를 컴파일하고, 실행해보면 아래와 같이 동작한다.

$ gcc main.c

$ ./a.out

(main.c:26) This is first log.  num_a:1  str_a:AAA
(main.c:29) This is second log.  num_a:1  str_a:AAA

$

 

 

+ Recent posts