variadic_va_end — va_end 매크로

variadic_va_end — va_end 매크로

va_end 매크로는 **va_start 또는 va_copy로 초기화된 ap 객체에 대한 정리(cleanup)**를 수행해요. <cstdarg> 헤더에 있어요.

출처: cppreference

본문

// <cstdarg> 헤더
void va_end( std::va_list ap );

va_endva_start/va_copy로 초기화된 va_list의 사용을 끝낼 때 호출해요.

사용 예

#include <cstdarg>

double average(int count, ...) {
    va_list args;
    va_start(args, count);     // 초기화
    double sum = 0;
    for (int i = 0; i < count; ++i)
        sum += va_arg(args, double);
    va_end(args);              // 정리 — 필수
    return sum / count;
}

규칙

  • va_start/va_copy로 초기화된 va_list는 반드시 va_end로 끝내야 해요.
  • 함수 반환 전·스코프 끝에서 호출해요.
  • va_end 후 그 va_list는 재사용하려면 다시 va_start해야 해요.
// va_copy로 복사한 것도 va_end로 정리
va_list args, copy;
va_start(args, n);
va_copy(copy, args);
// copy 사용
va_end(copy);
va_end(args);

주의

누락하면 동작이 정의되지 않을 수 있어요 (특히 va_list가 배열이나 참조인 구현에서). 반드시 짝을 맞춰 호출해야 해요.

va_end는 가변 인자 함수에서 va_list 사용을 마칠 때 필수로 호출하는 정리 매크로예요.

더 알아보기 (Learn more)

cppreference