표준 라이브러리 헤더 <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를 다른 함수로 넘기는 방법은 함수 인자 전달 규칙과 함께 봐요.