Je veux initialiser une liste chaînée avec des arguments de pointeur comme ceci:va_arg avec des pointeurs
/*
* Initialize a linked list using variadic arguments
* Returns the number of structures initialized
*/
int init_structures(struct structure *first, ...)
{
struct structure *s;
unsigned int count = 0;
va_list va;
va_start(va, first);
for (s = first; s != NULL; s = va_arg(va, (struct structure *))) {
if ((s = malloc(sizeof(struct structure))) == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}
count++;
}
va_end(va);
return count;
}
Le problème est que les erreurs de Clang type name requires a specifier or qualifier
à va_arg(va, (struct structure *))
, et dit que les paramètres par défaut de spécificateur de type int *. Il note également la forme instanciée à (struct structure *)
et struct structure *
. Ceci, ce qui semble être affecté à s
est int (struct structure *)
.
Il compile bien lorsque les parenthèses sont retirées de (struct structure *)
, mais les structures qui sont censées être initialisées sont inaccessibles.
Pourquoi est-ce que int
est supposé lorsque des parenthèses sont autour de l'argument de type passé à va_arg? Comment puis-je réparer cela?
'va_arg' est requis pour être une macro. –