va_start
| Definido en el encabezado <stdarg.h>
|
||
void va_start( va_list ap, parmN );
|
(hasta C23) | |
void va_start( va_list ap, ... );
|
(desde C23) | |
La va_start macro permite acceder a los argumentos variablesdespués del argumento con nombre parmN(hasta C23).
va_start debe invocarse con una instancia de un objeto va_list válido ap antes de cualquier llamada a va_arg.
|
Si |
(hasta C23) |
|
Si hay más de un argumento presente para |
(desde C23) |
Parámetros
| ap | - | una instancia del tipo va_list |
| parmN | - | el parámetro con nombre que precede al primer parámetro variable |
Valor expandido
(ninguno)
Ejemplo
#include <stdarg.h>
#include <stdio.h>
int add_nums_C99(int count, ...)
{
int result = 0;
va_list args;
va_start(args, count); // count can be omitted since C23
for (int i = 0; i < count; ++i)
result += va_arg(args, int);
va_end(args);
return result;
}
#if __STDC_VERSION__ > 201710L
// Same as above, valid since C23
int add_nums_C23(...)
{
int result = 0;
va_list args;
va_start(args);
int count = va_arg(args, int);
for (int i = 0; i < count; ++i)
result += va_arg(args, int);
va_end(args);
return result;
}
#endif
int main(void)
{
printf("%d\n", add_nums_C99(4, 25, 25, 50, 50));
#if __STDC_VERSION__ > 201710L
printf("%d\n", add_nums_C23(4, 25, 25, 50, 50));
#endif
}
Posible salida:
150
150
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
- 7.16.1.4 La macro va_start (p: 290-292)
- Estándar C17 (ISO/IEC 9899:2018):
- 7.16.1.4 La macro va_start (p: 198-199)
- Estándar C11 (ISO/IEC 9899:2011):
- 7.16.1.4 La macro va_start (p: 271-272)
- Estándar C99 (ISO/IEC 9899:1999):
- 7.16.1.4 La macro va_start (p: 251-252)
- Estándar C89/C90 (ISO/IEC 9899:1990):
- 4.8.1.1 La macro va_start
Véase también
| accede al siguiente argumento de función variádica (macro de función) | |
(C99) |
hace una copia de los argumentos de función variádica (macro de función) |
| finaliza el recorrido de los argumentos de función variádica (macro de función) | |
| contiene la información necesaria para va_start, va_arg, va_end, y va_copy (typedef) | |
Documentación de C++ para va_start
| |