В C имена тегов структуры не образуют идентификаторы в глобальном пространстве имен
struct not_a_global_identifier { /* ... */ };
. Чтобы ссылаться на эту структуру, вы должны использовать ключевое слово struct
(чтобы указать пространство имен)
struct not_a_global_identifer object;
или создать новый идентификатор в глобальном пространстве имен с помощью typedef
typedef struct not_a_global_identifer { /* ... */ } global_name_space_identifier;
В C имеется 4 пространства имен, см. 6.2.3 в C99 Standard :
Это законная программа C: -)
int main(void) {
typedef struct foobar { int foobar; } foobar;
foobar boo;
boo.foobar = 42;
if (boo.foobar) goto foobar;
foobar:
return 0;
}