Namespaces
Variants

va_start

From cppreference.net
Utilities library
Definido en el encabezado <cstdarg>
void va_start ( std :: va_list ap, parm_n ) ;

La macro va_start permite acceder a los argumentos variables que siguen al argumento nombrado parm_n .

va_start debe invocarse con una instancia de un objeto va_list válido ap antes de cualquier llamada a va_arg .

Si el parm_n es una expansión de paquete o una entidad resultante de una captura lambda , el programa está mal formado, no se requiere diagnóstico.

(desde C++11)

Si parm_n es de tipo referencia, o de un tipo no compatible con el tipo que resulta de las conversiones predeterminadas de argumentos , el comportamiento es indefinido.

Contenidos

Parámetros

ap - un objeto del tipo va_list
parm_n - el parámetro nombrado que precede al primer parámetro variable

Valor expandido

(ninguno)

Notas

va_start es necesario para soportar parm_n con el operador operator& sobrecargado.

Ejemplo

#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';
}

Salida:

150

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Se aplica a Comportamiento publicado Comportamiento correcto
CWG 273 C++98 no estaba claro si va_start debe
soportar parm_n s con operator& sobrecargado
requerido
LWG 2099 C++98 el comportamiento era indefinido si parm_n se
declara con tipo función, array o referencia
el comportamiento es indefinido si
parm_n es de tipo referencia

Véase también

accede al siguiente argumento de función variádica
(macro de función)
finaliza el recorrido de los argumentos de función variádica
(macro de función)
Documentación de C para va_start