표준 라이브러리 헤더 <stdarg.h>
표준 라이브러리 헤더 <stdarg.h>
함수가 인자의 개수를 고정하지 않고 받아야 할 때, 예를 들어 printf처럼 "몇 개가 올지 모르는 값들"을 처리해야 할 때가 있어요. 이걸 C에서는 가변 인자(variadic) 함수라고 부르죠. <stdarg.h>는 이 가변 인자 함수를 구현할 때 필요한 도구를 제공하는 헤더예요. 가변 인자 지원의 기초지요.
출처: cppreference
본문
타입(Types)
| 타입 | 설명 |
|---|---|
va_list |
va_start, va_arg, va_end, va_copy가 필요로 하는 정보를 담는 타입 |
매크로(Macros)
| 매크로 | 설명 |
|---|---|
va_start |
가변 인자에 접근을 시작하는 함수 매크로 |
va_arg |
다음 가변 인자에 접근하는 함수 매크로 |
va_copy |
(C99) 가변 인자를 복사하는 함수 매크로 |
va_end |
가변 인자 순회를 끝내는 함수 매크로 |
시그니처(Synopsis)
#define __STDC_VERSION_STDARG_H__ 202311L
typedef /*unspecified*/ va_list;
/*type*/ va_arg(va_list ap, /*type*/);
void va_copy(va_list dest, va_list src);
void va_end(va_list ap);
void va_start(va_list ap, ...);
전형적인 사용 패턴은 이렇게 돼요. 함수 안에서 va_start(ap, last)로 가변 인자 접근을 시작하고, va_arg(ap, 타입)을 호출할 때마다 다음 인자를 type에 맞춰 꺼내고, 마지막에 va_end(ap)로 정리를 하죠. va_start의 두 번째 인자는 함수에서 가변 인자 바로 앞에 오는 마지막 고정 인자예요. va_arg에서 타입을 정확히 맞춰주지 않으면 미정의 동작이 될 수 있으니 주의해야 해요.
더 알아보기
- 가변 인자 함수 문법은 언어의 variadic 함수 문서에서 확인해요.
va_list를 다른 함수로 넘기는 방법은 함수 인자 전달 규칙과 함께 봐요.