가변인자란?
가변인자란 인자의 개수가 변하는 인자
디버깅 사용방법
가변 인자와 내장 디버깅 매크로를 지원하지 않을 때
1. gcc 컴파일러 환경에서 디버깅용 매크로 선언
printf 함수처럼 매크로도 가변 개수의 인수를 취하도록 만들 수 있다. 이를 가변 매크로(variable macro)라고 한다.
gcc에서 확장으로 제공하는 문법이므로 당연히 다른 컴파일러에서는 쓸 수 없습니다.
C99의 표준 문법은 #define TRACE(fmt, args...) printf("(%s[%d] : " fmt, __FUNCTION__, __LINE___, ##args);
2. gcc 이외 컴파일러 환경에서 디버깅용 매크로 선언
#define TRACE(fmt, ...) printf(fmt, ##__VA_ARGS__)
가변 인자와 내장 디버깅 매크로를 지원 시
1. 가변인자 함수 사용
c언어에서 가변 인자를 제어하기 위한 라이브러리를 추가하여 가변 인자를 사용
<stdarg.h> : 가변인자들을 제어하기 위한 라이브러리 헤더
- va_list : 가변 인자 목록, 가변 인자의 메모리 주소를 저장하는 포인터
- va_start : 가변 인자를 가져올 수 있도록 포인터 설정
- va_arg : 가변 인자 포인터에서 특정 자료형 크기만큼 값 가져옴
- va_end : 가변 인자 처리가 끝났을 때 포인터를 NULL로 초기화
#include <stdio.h>
#include <stdarg.h>
int sum(int count, ...)
{
int res = 0;
va_list ap;
int i;
va_start(ap, count);
for(i=0; i<count; i++)
res += va_arg(ap, int);
va_end(ap);
return res;
}
int main()
{
printf("%d\n", sum(5, 1,2,3,4,5));
return 0;
}
2. vsprintf / vnsprintf
#include <stdarg.h> : 가변인자 함수들을 사용하기 위한 라이브러리 헤더
int vsprintf(char *Dest, const char *Format,va_list Args);
int vsnprintf(char *Dest, size_t n, const char *Format, va_list Args);
내장 디버깅 매크로
매크로 | 타입 | 출력 |
__func__ | %s | 매크로가 호출된 함수 |
__LINE__ | %d | 매크로가 호출된 라인 |
__FILE | %s | 매크로가 출력된 파일 |
__DATE__ | %s | 매크로가 호출된 날짜 |
__TIME | %s | 매크로가 호출된 시간 |
'프로그래밍 언어 > c(임베디드)' 카테고리의 다른 글
system() / sync() (0) | 2024.11.13 |
---|---|
Wiegand 통신 (0) | 2024.09.08 |
구조체 & 공용체 [1] (0) | 2024.07.18 |
LSM/MSB , 리틀 엔디안 / 빅 엔디안 (0) | 2024.07.16 |
while문 사용법 (0) | 2024.07.13 |