Macro de la biblioteca C -va_start()
Biblioteca estándar de C - <stdarg.h>
Descripción
va_startLa macro es de la biblioteca estándar de C<stdarg.h>una macro en el archivo de cabecera, utilizada para inicializar unva_listvariable, para acceder a un número variable de argumentos en una función de argumentos variables.
Macro de la biblioteca Cvoid va_start(va_list ap, last_arg)inicializaapla variable, yva_argyva_endse usa junto con la macro.last_argEs el último parámetro fijo conocido pasado a la función, es decir, el parámetro antes de los puntos suspensivos.
Esta macro debe ser llamada antes deva_argyva_endusarse.
Declaración
La siguiente es la declaración de la macro va_start().
void va_start(va_list ap, last);
Parámetros
va_list ap: Este es un tipo utilizado para acceder a argumentos variables. Se inicializará después de la llamada a la macro, para usarse en las subsiguientesva_arg: Este es el último parámetro fijo conocido antes de la lista de argumentos variables. Es decir, el último parámetro en la lista de parámetros de la función antes de que comiencen los argumentos variables.lastValor de retorno
Valor de retorno
NA
Pasos de uso
- parámetro).
lastDeclare una - variable, para almacenar la información de la lista de argumentos variables.
va_listUtilice - la macro para inicializar
va_startla variable.va_listUtilice - la macro para obtener cada argumento variable uno por uno.
va_argUtilice - la macro para limpiar
va_endla variable.va_listEjemplo
Ejemplo
Ejemplo
Ejemplo
#include <stdio.h>
#include <stdarg.h>
// Inicializa args para acceder a los argumentos variables
int sum(int count, ...) {
int total = 0;
va_list args;
// Obtiene cada argumento variable uno por uno y lo acumula a total
va_start(args, count);
// Limpia args
for (int i = 0; i < count; i++) {
total += va_arg(args, int);
}
// Salida 6
va_end(args);
return total;
}
int main() {
printf("Sum of 1, 2, 3: %d\n", sum(3, 1, 2, 3)); // Salida 22
printf("Sum of 4, 5, 6, 7: %d\n", sum(4, 4, 5, 6, 7)); Compilemos y ejecutemos el programa anterior, esto producirá el siguiente resultado:
return 0;
}
#include <stdarg.h>
// Inicializa args para acceder a los argumentos variables
int sum(int count, ...) {
int total = 0;
va_list args;
// Obtiene cada argumento variable uno por uno y lo acumula a total
va_start(args, count);
// Limpia args
for (int i = 0; i < count; i++) {
total += va_arg(args, int);
}
// Salida 6
va_end(args);
return total;
}
int main() {
printf("Sum of 1, 2, 3: %d\n", sum(3, 1, 2, 3)); // Salida 22
printf("Sum of 4, 5, 6, 7: %d\n", sum(4, 4, 5, 6, 7)); Compilemos y ejecutemos el programa anterior, esto producirá el siguiente resultado:
return 0;
}
Análisis
Sum of 1, 2, 3: 6 Sum of 4, 5, 6, 7: 22
Análisis
va_list args;variable de tipova_list, utilizada para almacenar la información de la lista de argumentos variables.args: Inicialiceva_start(args, count);para acceder a losargsargumentos variables que comienzan después.count: Utilicetotal += va_arg(args, int);la macro para obtener el siguiente argumento variable, aquí se asume que todos sonva_argde tipo, y se acumula aintla variable.total: Limpieva_end(args);, para liberar recursos y evitar comportamientos indefinidos.argsPrecauciones
Notas
va_startconjuntamente.va_list、va_argyva_endAl llamar a- después, debe llamar a
va_startpara finalizar el procesamiento de los argumentos variables.va_endAntes de llamar a - debe asegurarse de que la lista de parámetros de la función tenga al menos un parámetro fijo.
va_startEl parámetro es el último parámetro fijo antes de la lista de argumentos variables, que se utiliza para determinar desde dónde comenzar a procesar los argumentos variables. lastBiblioteca estándar de C - <stdarg.h>