VA_END |
Fin d'argument |
---|---|
Langage C | stdarg.h |
Syntaxe
void va_end(va_list ptrargument) |
Paramètres
Nom | Description |
---|---|
ptrargument | Ce paramètre permet d'indiquer le pointeur d'argument |
Description
Cette fonction permet de fixer le pointeur d'argument à la toute fin.
Algorithme
MODULE VA_END(ap) * Effectue les actions nécessaires pour terminer l'accès aux arguments variables ap ← null |
Remarques
- Définition et utilité : La fonction va_end fait partie de la bibliothèque <stdarg.h>, et elle est utilisée pour terminer l'utilisation d'une liste de paramètres variables. Après avoir initialisé un objet va_list avec va_start et récupéré les arguments avec va_arg, va_end permet de nettoyer la liste de paramètres avant que la fonction ne se termine.
- Prototypage et usage : Le prototype de va_end est simple : void va_end(va_list ap);, où ap est l'objet va_list ayant été utilisé avec va_start pour accéder aux paramètres. Elle ne renvoie rien et sert uniquement à libérer les ressources utilisées pour parcourir les paramètres.
- Ressources à libérer : Bien que va_end n'ait pas d'effet direct sur le comportement de la fonction, elle est essentielle pour éviter d'éventuelles fuites de mémoire ou des comportements indéfinis. Certaines implémentations peuvent utiliser des ressources systèmes pour gérer les paramètres variables, et va_end s'assure qu'elles sont libérées correctement.
- Ordre d'utilisation avec va_start : va_end doit toujours être appelée après l'utilisation de va_arg pour accéder aux paramètres et avant que la fonction ne retourne. Ne pas appeler va_end peut entraîner des problèmes, comme des fuites mémoire ou des erreurs d'exécution sur certaines plateformes.
- Non-influence sur la liste de paramètres : Contrairement à va_start et va_arg, affectant directement l'accès aux paramètres, va_end n'a pas d'influence visible sur la manière dont les arguments sont manipulés dans la fonction. Elle n'interfère pas avec la logique métier du traitement des paramètres.
- Comportement sur différentes plateformes : Sur certaines plateformes, la gestion des paramètres variables peut nécessiter l'utilisation de registres ou de la pile pour passer les paramètres. La fonction va_end prend en compte ces spécificités et garantit que les ressources utilisées pour la gestion des paramètres sont libérées, ce qui peut éviter des erreurs liées à la gestion de la pile.
- Incompatibilité avec l'oubli de va_start : Si va_end est appelée sans un appel préalable à va_start, cela peut entraîner des comportements indéfinis. Il est impératif de respecter l'ordre et la logique de ces macros pour éviter des erreurs subtiles dans le code.
- Sécurité et bonnes pratiques : Bien qu'aucune ressource ne soit explicitement libérée dans certaines implémentations, il est considéré comme une bonne pratique d'utiliser systématiquement va_end à la fin d'une fonction utilisant des paramètres variables. Cette pratique garantit que le code est conforme aux spécifications du langage C et reste portable entre différentes plateformes et compilateurs.
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_end
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