Я хочу инициализировать связанный список с аргументами указателя следующим образом:
/*
* 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;
}
Проблема состоит в том, что лязгает ошибка type name requires a specifier or qualifier
на va_arg(va, (struct structure *))
, и он говорит, что спецификатор типа по умолчанию имеет значение int Он также отмечает экземплярную форму в (struct structure *)
и struct structure *
. То, что, похоже, присваивается s
, равно int (struct structure *)
.
Прекрасно компилируется, когда скобки удаляются из (struct structure *)
, но структуры, которые должны быть инициализированы, недоступны.
Почему int
предполагается, когда круглые скобки находятся вокруг аргумента типа, передаваемого va_arg? Как я могу это исправить?