반응형
안녕하세요,
오늘은 가변 인자를 이용한 디버그 함수를 만드는 방법과 사용 예시에 대해 포스팅 해보도록 하겠습니다.
가변 인자
가변 인자를 이용하면 사용자가 입력 파라미터에 구애없이 사용자 정의 함수를 만들 수 있는 장점이 있습니다.
가변 인자를 이용하기 위해선 va_list, va_arg, va_start, va_end, ... 등의 타입이 필요한데요, 이는 C에서는 stdarg.h, C++에서는 cstdarg에 정의되어있습니다.
C 언어를 이용해 실제 실무에서 많이 사용되는 가변 인자를 이용한 사용자 정의 디버그 함수 예시를 보여드리겠습니다.
사용자 정의 출력 함수 (디버그 함수) 예시
예시 #1
#include <stdarg.h>
#include <stdio.h>typedef enum{DBG_NONE,DBG_ERROR,DBG_WARNING,DBG_NOTICE,DBG_INFO,DBG_DEBUG,DBG_TRACE,DBG_VERBOSE,DBG_END} DEBUG_LEVEL;
// Debug level is DBG_DEBUGDEBUG_LEVEL debug_level = DBG_DEBUG;void debug_print(DEBUG_LEVEL, char *, ...);int main(){debug_print(DBG_ERROR, "DBG_ERROR print\n");debug_print(DBG_WARNING, "DBG_WARNING print\n");debug_print(DBG_NOTICE, "DBG_NOTICE print\n");debug_print(DBG_INFO, "DBG_INFO print\n");debug_print(DBG_DEBUG, "DBG_DEBUG print\n");debug_print(DBG_TRACE, "DBG_TRACE print\n");debug_print(DBG_VERBOSE, "DBG_VERBOSE print\n");}
void debug_print(DEBUG_LEVEL lv, char *pStr, ...){if (debug_level < lv)return;
// stack pointer for the variadic argument listva_list list;char buf[1024];
// Set the pointer of the first variadic argumentva_start(list, pStr);
// Put the output in the buffer with the variadic argument listvsprintf(buf, pStr, list);// Initialize the stack pointer as NULLva_end(list);
printf(pStr);}
결과
DBG_ERROR print
DBG_WARNING print
DBG_NOTICE print
DBG_INFO print
DBG_DEBUG print
디버그 레벨을 이용해 원하는 레벨까지만 출력하도록 하는 함수입니다. 현재 디버그 레벨이 DBG_DEBUG 이므로 DBG_TRACE와 DBG_VERBOSE에 대해서는 출력되지 않는 것을 볼 수 있습니다.
반응형
예시 #2처럼 디버그 함수뿐만 아니라 사용자가 원하는 형식으로 출력하도록 구현해도 상관 없습니다.
예시 #2
#include <stdarg.h>#include <stdio.h>
void bob_says(char *, ...);int main(){bob_says("Hello");bob_says("Nice to meet you");}
void bob_says(char *pStr, ...){
// stack pointer for the variadic argument listva_list list;char buf[1024];
// Set the pointer of the first variadic argumentva_start(list, pStr);// Put the output in the buffer with the variadic argument listvsprintf(buf, pStr, list);// Initialize the stack pointer as NULLva_end(list);
printf("Bob: \"%s\" \n", pStr);}
결과
Bob: "Hello"
Bob: "Nice to meet you"
지금까지 가변 인자를 이용한 디버그 함수를 만드는 방법과 사용 예시였습니다.
읽어주셔서 감사합니다.
반응형
'▶ 프로그래밍 [Programming] > ▷ C 언어 [C Language]' 카테고리의 다른 글
[C 언어] 사전 정의 매크로 (__DATE__, __TIME__, __FILE__, __LINE__, STDC__, __FUNCTION__) (0) | 2023.04.07 |
---|---|
[C 언어] 가변 인자를 이용한 사용자 정의 함수 만들기 (va_list, va_arg, va_start, va_end) (0) | 2021.11.25 |
[C 언어] 버블소트(bubble sort)를 이용한 정렬 사용 예시 (example code) (0) | 2021.11.24 |
[C 언어] 함수 포인터를 이용한 콜백함수(callback function) 사용 예시 (example code) (0) | 2021.11.23 |
[C 언어] 퀵소트(qsort)를 이용한 배열, 구조체 정렬 사용 예시 (example code) (0) | 2021.11.21 |
댓글