작성일: 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
$
'C language' 카테고리의 다른 글
C 언어로 작성된 Binary 파일에 Build Date 추가하기 (0) | 2024.12.17 |
---|---|
Linux에서 Coredump 파일 생성하도록 설정하기 (0) | 2024.12.10 |
gdb - 자주 사용하는 명령 옵션 (0) | 2024.12.10 |
C언어 - Thread & Mutex Lock & Condition (0) | 2023.03.20 |