variadic_va_start — va_start 매크로
variadic_va_start — va_start 매크로
va_start 매크로는 가변 인자에 접근할 수 있게 va_list를 초기화해요. <cstdarg> 헤더에 있어요.
가변 인자 함수에서 필수로 처음 호출하는 매크로예요.
출처: cppreference
본문
// <cstdarg> 헤더
void va_start( std::va_list ap, parmN ); // C++26 이전 (parmN = 마지막 고정 매개변수)
void va_start( std::va_list ap, ... ); // C++26 (콤마 불필요)
va_start(ap, parmN)은 마지막 고정 매개변수 parmN 이후의 가변 인자에 접근하게 ap를 초기화해요.
사용 예
#include <cstdarg>
#include <cstdio>
void print_n(int count, ...) { // count가 마지막 고정 매개변수
va_list args;
va_start(args, count); // count 이후의 가변 인자 시작
for (int i = 0; i < count; ++i) {
double d = va_arg(args, double);
// ...
}
va_end(args);
}
print_n(3, 1.1, 2.2, 3.3);
규칙
va_start는 가변 인자를 읽기 전에 반드시 호출해야 해요.- 마지막 고정 매개변수는 단순해야 해요 (배열·참조·함수 타입이면 안 됨).
- C++26부터
parmN이 선택적(생략 가능)이고,va_start(ap, ...)처럼 콤마 없이 쓸 수 있어요.
// C++26 형태
#include <cstdarg>
void f(...) {
va_list ap;
va_start(ap); // parmN 생략 (C++26)
// ...
va_end(ap);
}
주의
va_start후 가변 인자 사용이 끝나면va_end를 호출해야 해요.va_start사용 시 기능/동작은 타입 안전하지 않고 호출 규약에 의존해요.
va_start는 C 스타일 가변 인자 함수에서 가변 목록 접근을 시작하는 필수 매크로예요. va_arg로 값을 읽고 va_end로 정리해요.