VA_ARG |
Argument |
---|---|
Langage C | stdarg.h |
Syntaxe
type va_arg(va_list ptrargument,type) |
Paramètres
Nom | Description |
---|---|
ptrargument | Ce paramètre permet d'indiquer le pointeur d'argument |
type | Ce paramètre permet d'indiquer le type |
Description
Cette fonction donne l'argument (le paramètre) suivant de la fonction.
Algorithme
MODULE VA_ARG(ap, type) SI ap pointe à une liste invalide ou si la liste est vide ALORS RETOURNE une erreur (comportement indéfini) FIN SI valeur_courante ← récupérer_valeur_à_l'adresse_actuelle(ap, type) * Avance au prochain paramètre ap ← avancer_pointeur(ap, taille_de(type)) RETOURNE valeur_courante |
Remarques
- Définition et utilité : La fonction va_arg fait partie de la bibliothèque <stdarg.h> et est utilisée pour accéder aux arguments variables dans une fonction ayant un nombre de paramètres non déterminé à la compilation (comme printf). Elle permet de récupérer chaque paramètre passé à la fonction, en spécifiant son type, et de les traiter dynamiquement dans le corps de la fonction.
- Prototypage et usage : Le prototype de va_arg est type va_arg(va_list ap, type);, où ap est un objet de type va_list (généralement un pointeur à la liste d'arguments), et type est le type de l'argument à récupérer. Cette fonction renvoie la valeur de l'argument du type spécifié.
- Séquence d'appel : Pour utiliser va_arg, il est nécessaire de commencer par initialiser un objet de type va_list avec va_start et de le terminer avec va_end afin de libérer les ressources associées. Cela permet à va_arg de parcourir correctement la liste de paramètres.
- Typage statique nécessaire : La fonction va_arg exige que le type d'argument soit spécifié explicitement à chaque appel. Il est donc crucial de connaître le type exact des paramètres avant de les récupérer. Une erreur de type peut entraîner un comportement indéfini ou des erreurs de mémoire.
- Comportement sur les architectures et plateformes : Le comportement de va_arg peut être influencé par l'architecture de la machine (32 bits, 64 bits,...). Les paramètres sont passés de manière spécifique selon la plateforme (par exemple, via la pile ou des registres), ce qui peut affecter l'ordre dans lequel les paramètres sont récupérés.
- Limites de va_arg : Bien que va_arg permette un accès flexible aux paramètres, elle ne vérifie pas la validité de le paramètre passé. Par conséquent, si le type spécifié dans va_arg ne correspond pas au type réel de l'argument dans la liste, cela peut entraîner des erreurs, telles que la lecture de données incorrectes.
- Applications typiques : va_arg est couramment utilisée dans les fonctions devant accepter un nombre variable de paramètres. Par exemple, dans printf, elle permet de traiter dynamiquement un nombre et des types de paramètres inconnus à la compilation. Elle est également utilisée dans des fonctions comme vfprintf, vsprintf et autres variantes similaires.
- Sécurité et erreurs courantes : L'utilisation de va_arg nécessite une attention particulière pour éviter des erreurs de mémoire, telles que l'accès à des paramètres au-delà du nombre réel de paramètres passés, ce qui peut provoquer un comportement indéfini. Pour garantir une utilisation correcte, il est important de connaître à l'avance le nombre de paramètres et leur type.
Voir également
Langage de programmation - C - Référence procédures et fonctions - vprintf
Langage de programmation - C - Référence procédures et fonctions - vsprintf
Langage de programmation - C++ - Référence procédures et fonctions - va_arg
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 735.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 289.
Dernière mise à jour : Mardi, le 28 juillet 2015