Variadic functions
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Les fonctions variadiques sont des fonctions (par exemple std::printf ) qui prennent un nombre variable d'arguments .
Pour déclarer une fonction variadique, des points de suspension apparaissent après la liste des paramètres, par exemple int printf ( const char * format... ) ; , qui peut être précédée d'une virgule facultative. Voir Arguments variadiques pour plus de détails sur la syntaxe, les conversions automatiques d'arguments et les alternatives.
Pour accéder aux arguments variadiques depuis le corps de la fonction, les utilitaires de bibliothèque suivants sont fournis :
|
Défini dans l'en-tête
<cstdarg>
|
|
|
permet l'accès aux arguments des fonctions variadiques
(macro de fonction) |
|
|
accède au prochain argument de fonction variadique
(macro de fonction) |
|
|
(C++11)
|
effectue une copie des arguments de fonction variadiques
(macro de fonction) |
|
termine le parcours des arguments de fonction variadiques
(macro de fonction) |
|
|
contient les informations nécessaires pour
va_start
,
va_arg
,
va_end
, et
va_copy
(typedef) |
|
Exemple
#include <cstdarg> #include <iostream> void simple_printf(const char* fmt...) // C-style "const char* fmt, ..." is also valid { va_list args; va_start(args, fmt); while (*fmt != '\0') { if (*fmt == 'd') { int i = va_arg(args, int); std::cout << i << '\n'; } else if (*fmt == 'c') { // note automatic conversion to integral type int c = va_arg(args, int); std::cout << static_cast<char>(c) << '\n'; } else if (*fmt == 'f') { double d = va_arg(args, double); std::cout << d << '\n'; } ++fmt; } va_end(args); } int main() { simple_printf("dcff", 3, 'a', 1.999, 42.5); }
Sortie :
3 a 1.999 42.5
Voir aussi
|
Documentation C
pour
Fonctions variadiques
|