Variadic functions
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 :
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
|