3
Je veux faire varargs
fonction pour libérer plusieurs pointeurs à la fois, surtout pour nettoyer le code. J'ai donc:Arguments variables sans premier argument - qu'est-ce qui appartient à va_start?
void free_all(...) {
va_list arguments;
/* Initializing arguments to store all values after last arg */
// but there are no args!
va_start (arguments, ?????);
/* we expect the caller to send last argument as NULL **/
void* pointer = va_arg (arguments, void*);
while((pointer = va_arg (arguments, void*))!=NULL) {
free(pointer);
}
va_end (arguments); // Cleans up the list
}
Alors quoi mettre en va_start (arguments, ?????)
?
Est-ce une limitation technique, ou simplement quelque chose qui n'est pas implémenté? (Ici, je suis simplement curieux de savoir comment cela fonctionne) –
C'est la façon dont cela fonctionne. Il serait impossible de l'implémenter autrement. Au moins, je pense que ce serait le cas. –
@ TomášZato, c'est un oubli de la norme IMO. Cet argument supplémentaire est un crochet dans le cadre de la pile. Théoriquement, cela pourrait être accompli sans cela. – StoryTeller