typedef struct name
{
}name_t;
name
здесь - структурный тег, и он является лишним для обычного варианта использования, так как вы в конечном итоге получаете typedef
в любом случае и с этого момента должны использовать только name_t
в своем коде.
Единственная причина, по которой вы добавляете тег, это особый случай, когда вам нужна структура со ссылками на себя, такая как struct name* next;
член в связанном списке или тому подобное. В таких случаях мы должны использовать тег struct, поскольку имя typedef нельзя использовать до выполнения самого оператора typedef. Другой альтернативой этому является предварительное объявление структуры.
_t
именование является стандартным способом именования типов с незапамятных времен. К сожалению, стандарт POSIX имел ошибочную идею запретить такое именование, поэтому, если вы заботитесь о соответствии POSIX, вы не должны называть ваши типы с _t
в конце. Если вас не волнует POSIX, вы должны использовать _t
, потому что он дает правильный, самодокументированный код.