Namespaces
Variants

Variadic functions

From cppreference.net
< c

Las funciones variádicas son funciones (por ejemplo, printf ) que toman un número variable de argumentos.

La declaración de una función variádica utiliza una elipsis como último parámetro, ej. int printf ( const char * format, ... ) ; . Consulte argumentos variádicos para detalles adicionales sobre la sintaxis y conversiones automáticas de argumentos.

Acceder a los argumentos variádicos desde el cuerpo de la función utiliza las siguientes facilidades de biblioteca:

Contenidos

Tipos
contiene la información necesaria para va_start , va_arg , va_end , y va_copy
(typedef)
Macros
Definido en el encabezado <stdarg.h>
habilita el acceso a los argumentos de función variádicos
(macro de función)
accede al siguiente argumento de función variádico
(macro de función)
(C99)
realiza una copia de los argumentos de función variádicos
(macro de función)
finaliza el recorrido de los argumentos de función variádicos
(macro de función)

Ejemplo

Imprimir valores de diferentes tipos.

#include <stdarg.h>
#include <stdio.h>
void simple_printf(const char* fmt, ...)
{
    va_list args;
    for (va_start(args, fmt); *fmt != '\0'; ++fmt)
    {
        switch(*fmt)
        {
            case 'd':
            {
                int i = va_arg(args, int);
                printf("%d\n", i);
                break;
            }
            case 'c':
            {
                // A 'char' variable will be promoted to 'int'
                // A character literal in C is already 'int' by itself
                int c = va_arg(args, int);
                printf("%c\n", c);
                break;
            }
            case 'f':
            {
                double d = va_arg(args, double);
                printf("%f\n", d);
                break;
            }
            default:
                puts("Unknown formatter!");
                goto END;
        }
    }
END:
    va_end(args);
}
int main(void)
{
    simple_printf("dcff", 3, 'a', 1.969, 42.5);
}

Salida:

3
a
1.969000
42.50000

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.16 Argumentos variables <stdarg.h> (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.16 Argumentos variables <stdarg.h> (p: TBD)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.16 Argumentos variables <stdarg.h> (p: 269-272)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.15 Argumentos variables <stdarg.h> (p: 249-252)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 4.8 ARGUMENTOS VARIABLES <stdarg.h>

Véase también

Documentación de C++ para Funciones variádicas