Namespaces
Variants

va_start

From cppreference.net
Utilities library
헤더 파일에 정의됨 <cstdarg>
void va_start ( std :: va_list ap, parm_n ) ;

va_start 매크로는 명명된 인수 parm_n 다음에 오는 가변 인수들에 대한 접근을 가능하게 합니다.

va_start 는 유효한 va_list 객체 ap 에 대한 인스턴스와 함께 va_arg 를 호출하기 전에 호출되어야 합니다.

만약 parm_n pack expansion 이거나 lambda capture 에서 비롯된 엔티티인 경우, 프로그램의 형식이 잘못되었으며 진단이 필요하지 않습니다.

(C++11부터)

만약 parm_n 이 참조 타입이거나, 기본 인자 승격 에서 발생하는 타입과 호환되지 않는 타입인 경우, 그 동작은 정의되지 않습니다.

목차

매개변수

ap - va_list 타입의 객체
parm_n - 첫 번째 가변 매개변수 앞에 오는 명명된 매개변수

확장된 값

(없음)

참고 사항

va_start 는 오버로드된 operator& 를 가진 parm_n 을 지원하기 위해 필요합니다.

예제

#include <cstdarg>
#include <iostream>
int add_nums(int count...)
{
    int result = 0;
    std::va_list args;
    va_start(args, count);
    for (int i = 0; i < count; ++i)
        result += va_arg(args, int);
    va_end(args);
    return result;
}
int main()
{
    std::cout << add_nums(4, 25, 25, 50, 50) << '\n';
}

출력:

150

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
CWG 273 C++98 va_start 가 오버로드된 operator& 를 가진
parm_n 을 지원해야 하는지 명확하지 않았음
지원해야 함
LWG 2099 C++98 parm_n 이 함수, 배열, 또는 참조 타입으로
선언된 경우 동작이 정의되지 않았음
parm_n 이 참조 타입인 경우
동작이 정의되지 않음

참고 항목

다음 가변 인수 함수 인자에 접근
(함수 매크로)
가변 인수 함수 인자의 순회를 종료
(함수 매크로)
C 문서 for va_start