Namespaces
Variants

va_start

cppreference.net에서 가져옴
 
 
유틸리티 라이브러리
일반 유틸리티
관계 연산자 (C++20에서 폐지됨)
정수 비교 함수
(C++20)(C++20)(C++20)    
(C++20)
스왑 및 타입 연산
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
공통 어휘 타입
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
헤더 <cstdarg>
void va_start( std::va_list ap, parmN );
(C++26까지)
void va_start( std::va_list ap, ... );
(C++26부터)

va_start 매크로는 명명된 인자 다음에 오는 가변 인자parmN(C++26까지)에 접근할 수 있게 합니다.

va_start는 std::va_list 객체의 유효한 인스턴스와 함께 호출되어야 합니다. ap 이후 va_arg 호출이 이루어지기 전에 말입니다.

만약 parm_n가 팩 확장이거나 람다 캡처의 결과인 엔티티라면, 프로그램은 진단 없이 잘못된 형식(ill-formed)입니다.

(C++11부터)

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

(C++26까지)

만약 va_start에 인자가 둘 이상 존재하면, 두 번째 및 그 이후 인자를 구성하는 전처리 토큰은 무시됩니다. 그 인자들 중 하나라도 균형이 맞지 않는 괄호를 포함하거나, 토큰으로 변환되지 않는 전처리 토큰을 포함하는 경우, 프로그램은 진단 없이 잘못된 형식(ill-formed)입니다.

(C++26부터)

매개변수

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