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로 정리해요.

더 알아보기 (Learn more)

cppreference