작성일: 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,C++ 언어 정적 분석 도구 - Coverity, CppCheck, SonarQube (0) | 2025.01.24 |
---|---|
[C 언어] localtime() 함수를 signal handler에서 사용시 문제점 (0) | 2025.01.21 |
C 언어로 작성된 Binary 파일에 Build Date 추가하기 (0) | 2024.12.17 |
Linux에서 Coredump 파일 생성하도록 설정하기 (0) | 2024.12.10 |
gdb - 자주 사용하는 명령 옵션 (0) | 2024.12.10 |