Macro de la biblioteca C -va_arg()

C 标准库 - <stdarg.h>Biblioteca estándar de C - <stdarg.h>

va_argLa macro es de la biblioteca estándar de C<stdarg.h>Una macro en el archivo de encabezado, utilizada para obtener secuencialmente el valor de cada argumento variable en una función de argumentos variables. Después de usarva_startla macro para inicializarva_listla variable, se usa para acceder al siguiente argumento en la lista de argumentos variables.

Declaración

La siguiente es la declaración de la macro va_arg().

type va_arg(va_list ap, type);

Parámetros

  • va_list ap: unava_listvariable de tipo, que ya ha sidova_startinicializada por la macro, apuntando a la posición actual de la lista de argumentos variables.
  • type: el tipo del siguiente argumento a obtener. Debe ser un tipo claramente identificable.

Valor de retorno

Devuelve el siguiente argumento de la lista de argumentos variables actual, de tipo type.

Pasos de uso

  • En una función de argumentos variables, useva_startla macro para inicializarva_listla variable.
  • Useva_argla macro para obtener secuencialmente cada argumento variable.
  • Useva_endla macro para limpiarva_listla variable.

Ejemplo

El siguiente es un ejemplo que usava_argla macro. El programa define una función de argumentos variables para calcular la suma de un número variable de argumentos:

Ejemplo

#include <stdio.h>
#include <stdarg.h>

// Función de argumentos variables, calcula la suma de los argumentos
int sum(int count, ...) {
    int total = 0;
    va_list args;

    // Inicializa args para acceder a los argumentos variables
    va_start(args, count);

    // Obtiene los argumentos variables uno por uno y los acumula en total
    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;
}

Compilemos y ejecutemos el programa anterior, esto producirá el siguiente resultado:

Sum of 1, 2, 3: 6
Sum of 4, 5, 6, 7: 22

Explicación

  • va_list args;: declarar unava_listvariable de tipoargs, utilizada para almacenar la información de la lista de argumentos variables.
  • va_start(args, count);: inicializarargspara acceder a loscountargumentos variables que comienzan después.
  • total += va_arg(args, int);: usarva_argla macro para obtener el siguiente argumento variable, aquí se asume que todos soninttipo, y se acumulan entotalla variable.
  • va_end(args);: limpiarargs, para liberar recursos y evitar un comportamiento indefinido.

Precauciones

  • va_argLa macro debeva_startusarse después de, yva_endantes de usarse.
  • typeEl parámetro debe ser un tipo definido y coincidir con el tipo real de los argumentos variables.
  • Si al llamarva_argse excede el número de argumentos variables, el comportamiento es indefinido.
  • Usarva_endpara limpiarva_listla variable es obligatorio, para evitar posibles fugas de recursos o comportamiento indefinido.

C 标准库 - <stdarg.h>Biblioteca estándar de C - <stdarg.h>

Otras extensiones