Je suis en train de passer une liste d'arguments variables d'éléments vides * à une fonction en C.langage C: Comment passer une liste d'arguments variables de vide * une fonction
Comment puis-je faire ?
Comment calculer le nombre d'éléments dans la liste? Comment faire une boucle dans la liste var-args et passer chaque élément vide * à une autre fonction qui prend un élément void * comme paramètre?
C'est ce que j'ai fait, mais cela ne fonctionne pas.
void AddValues(List* data, void* args, ...) {
int len = sizeof (args)/sizeof (*args);
for(int i=0;i<len;i++){ processItem(args[0]); }
}
void processItem(void* item){
}
http: // fr .cppreference.com/w/c/variadic – Rafael
Vous ne pouvez pas calculer la longueur de cette façon. 'sizeof (args)/sizeof (* args)' = 'sizeof (void *)/sizeof (void)' mais void n'a pas de taille. Les fonctions qui prennent des listes varargs doivent pouvoir déterminer la taille d'une autre source: - un autre paramètre (printf utilise le nombre de% dans la chaîne de format) ou une valeur spéciale (comme tous les pointeurs void * pointent vers les choses et le dernier l'un est NULL) Donc soit le premier paramètre doit être la taille, soit votre dernier vide * doit avoir une valeur sentinelle spéciale. –
@gbenroscience Votre paramètre 'void *' n'a absolument rien à voir avec le '...' pour var-args. Vous ne pouvez pas déférer un 'void *', et si vous le pouviez, cela ne vous dirait pas combien de choses ont été pointées ou quoi que ce soit, car en ce qui concerne le compilateur, c'est juste un pointeur vers 'void'. –