В C, когда вы определяете тип структуры:
struct StructA {
int foo;
double bar;
};
имя типа struct StructA
, а не просто StructA
. (C ++ позволяет ссылаться на тип просто как StructA
; C ++ - это другой язык.
Если вы настаиваете на наличии имени из одного слова, вы можете использовать typedef (который, следует отметить, создает новое имя для существующего типа, а не новый тип):
typedef struct StructA StructA;
Теперь вы можете ссылаться на тип либо как StructA
, либо как struct StructA
.
Их можно объединить в одну декларацию:
typedef struct StructA {
int foo;
double bar;
} StructA;
Обратите внимание, что я использовал один и тот же идентификатор для тега struct и для typedef. Поскольку они находятся в разных пространствах имен, это совершенно правильно.
С другой стороны, я предпочитаю вообще не указывать typedef и просто ссылаться на тип как struct StructA
.
Кстати, имена _StructA
и _LinusTorvalds
в вашем вопросе зарезервированы для реализации и не должны использоваться в вашем собственном коде. Как правило, следует избегать идентификаторов, начинающихся с подчеркивания. (Использование таких идентификаторов не редкость, но это неправильно, если только код не является частью самой реализации C).
Подводя итог: typedef необходим, только если вы хотите, чтобы имя типа имело одно слово (что на самом деле не требуется) - и если вы используете typedef, нет реальной причины использовать разные идентификаторы для typedef и тега struct.