En langage C, les fonctions peuvent accepter un nombre fixe ou variable d'arguments. Les fonctions standard sont définies comme suit:
int sum(int a, int b) { return a + b; }
Pour un nombre variable d'arguments, le macro <stdarg.h> est utilisé, ce qui permet de traiter un nombre différent de paramètres d'entrée.
Exemple:
#include <stdarg.h> #include <stdio.h> int sum(int count, ...) { int total = 0; va_list args; va_start(args, count); for (int i = 0; i < count; ++i) { total += va_arg(args, int); } va_end(args); return total; }
Quelles sont les différences entre les fonctions à nombre d'arguments variable et les fonctions surchargées, et comment réaliser la surcharge en C ?
Réponse: En C, il n'y a pas de prise en charge de la surcharge des fonctions comme en C++ : le nom de la fonction et le nombre d'arguments doivent être uniques. Les arguments variables fournissent une interface universelle, mais ce n'est pas de la "surcharge".
Exemple (incorrect):
// Cela ne fonctionnera pas en C, car on ne peut pas créer deux fonctions avec le même nom: int foo(int a); float foo(float b); // Erreur de compilation.
Histoire
Histoire
va_end, ce qui a conduit à une fuite de ressources sur certaines architectures. Les symptômes n'ont apparaissent que lors de l'utilisation répétée de la fonction.Histoire
Lors du traitement d'une fonction avec des arguments variables, va_list a été utilisé deux fois sans appel de va_copy, ce qui a causé un comportement imprévisible. L'erreur ne s'est pas manifestée immédiatement, mais seulement après des modifications du compilateur.