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_end는 va_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 사용을 마칠 때 필수로 호출하는 정리 매크로예요.