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
1va_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
1void 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.
2type 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.
3void 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 <stdio.h>
#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 ava_arg。
  • Después de usarva_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.
Otras extensiones