C Biblioteca estándar -<stdarg.h>
<stdarg.h>Es un archivo de cabecera de la biblioteca estándar de C, que proporciona un conjunto de macros para acceder a un número variable de argumentos.
stdarg.hEl archivo de cabecera define un tipo de variableva_listy tres macros, estas tres macros se pueden utilizar para obtener los parámetros de una función cuando el número de parámetros es desconocido (es decir, el número de parámetros es variable).
Las funciones de parámetros variables generalmente usan puntos suspensivos al final de la lista de parámetros...para su definición.
Variables de biblioteca
A continuación se muestran los tipos de variables definidos en el archivo de cabecera stdarg.h:
| N.º | Variable y descripción |
|---|---|
| 1 | va_list Este es un tipo adecuado parava_start()、va_arg()yva_end()almacenar información con estas tres macros. Tipo utilizado para almacenar información de parámetros variables. |
Macros de biblioteca
A continuación se muestran las macros definidas en el archivo de cabecera stdarg.h:
| N.º | Macro y descripción |
|---|---|
| 1 | void va_start(va_list ap, last_arg) Esta macro inicializaapla variable, que se utiliza junto conva_argyva_endla macro.last_arges el último parámetro fijo conocido pasado a la función, es decir, el parámetro anterior a los puntos suspensivos. |
| 2 | type va_arg(va_list ap, type) Esta macro recupera de la lista de parámetros de la función el siguiente parámetro de tipotype. |
| 3 | void va_end(va_list ap) Esta macro permite que una función con parámetros variables que usava_startla macro regrese. Si no se llamava_endantes de regresar de la función, el resultado es indefinido. |
Ejemplo
A continuación se muestra un ejemplo de uso de<stdarg.h>para implementar una función de parámetros variables. Esta función calcula la suma de todos los parámetros:
Ejemplo
#include <stdarg.h>
// Calcula la suma de los parámetros variables
int sum(int count, ...) {
int total = 0;
va_list args;
// Inicializa args para acceder a los parámetros variables
va_start(args, count);
// Accede a los parámetros variables uno por uno
for (int i = 0; i < count; i++) {
total += va_arg(args, int);
}
// Limpia args
va_end(args);
return total;
}
int main() {
printf("Sum of 1, 2, 3: %d\n", sum(3, 1, 2, 3)); // Salida 6
printf("Sum of 4, 5, 6, 7: %d\n", sum(4, 4, 5, 6, 7)); // Salida 22
return 0;
}
Resultado de salida:
Sum of 1, 2, 3: 6 Sum of 4, 5, 6, 7: 22
Análisis
va_list args;: declara unava_listvariable, utilizada para acceder a los parámetros variables.va_start(args, count);: inicializaargspara recorrer la lista de parámetros variables, comenzando desdecountel primer parámetro después de.total += va_arg(args, int);: obtiene el siguiente parámetro de la lista de parámetros variables y lo acumula entotal. El tipo de parámetro esint。va_end(args);: limpiaargs。
Notas
- Cada tipo de parámetro en la lista de parámetros variables debe ser explícito y debe pasarse de manera consistente a
va_arg。 - Después de usar
va_start, se debe usarva_endpara limpiar lava_listvariable. va_start、va_argyva_endLas macros deben usarse en pares dentro de una función para evitar comportamientos indefinidos.