次のようなポインタ引数を使用してリンクリストを初期化したい:
/*
* 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;
}
問題は、でclangエラーが発生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に渡された型引数の周りにあるのになぜ仮定されるのですか?どうすればこれを修正できますか?