Namespaces
Variants

Variadic functions

From cppreference.net
< c

Les fonctions variadiques sont des fonctions (par exemple printf ) qui prennent un nombre variable d'arguments.

La déclaration d'une fonction variadique utilise des points de suspension comme dernier paramètre, par exemple int printf ( const char * format, ... ) ; . Voir les arguments variadiques pour plus de détails sur la syntaxe et les conversions automatiques d'arguments.

L'accès aux arguments variadiques depuis le corps de la fonction utilise les utilitaires de bibliothèque suivants :

Table des matières

Types
contient les informations nécessaires pour va_start , va_arg , va_end , et va_copy
(typedef)
Macros
Défini dans l'en-tête <stdarg.h>
permet l'accès aux arguments des fonctions variadiques
(macro de fonction)
accède au prochain argument de fonction variadique
(macro de fonction)
(C99)
effectue une copie des arguments de fonction variadiques
(macro de fonction)
termine le parcours des arguments de fonction variadiques
(macro de fonction)

Exemple

Afficher les valeurs de différents types.

#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);
}

Sortie :

3
a
1.969000
42.50000

Références

  • Norme C23 (ISO/IEC 9899:2024):
  • 7.16 Variable arguments <stdarg.h> (p: TBD)
  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.16 Arguments variables <stdarg.h> (p: TBD)
  • Norme C11 (ISO/IEC 9899:2011) :
  • 7.16 Arguments variables <stdarg.h> (p: 269-272)
  • Norme C99 (ISO/CEI 9899:1999) :
  • 7.15 Arguments variables <stdarg.h> (p: 249-252)
  • Norme C89/C90 (ISO/IEC 9899:1990) :
  • 4.8 ARGUMENTS VARIABLES <stdarg.h>

Voir aussi

Documentation C++ pour Fonctions variadiques