В то время как ответ предупреждение: назначение из несовместимого типа указателя для массива linklist, я заметил, что любой необъявленный идентификатор, связанный с ключевым словом struct
, считается просроченным объявленным идентификатором.
Например, программа ниже хорошо компилируется:
/* Compile with "gcc -std=c99 -W -Wall -O2 -pedantic %" */
#include <stdio.h>
struct foo
{
struct bar *next; /* Linked list */
};
int main(void) {
struct bar *a = 0;
struct baz *b = 0;
struct foo c = {0};
printf("bar -> %p\n", (void *)a);
printf("baz -> %p\n", (void *)b);
printf("foo -> %p, %zu\n", (void *)&c, sizeof c); /* Remove %zu if compiling with -ansi flag */
return 0;
}
Мой вопрос:. Какое правило управляет компилятором C
для обработки необъявленных struct identifier
в качестве объявленных просроченных типов struct
?