O _t
geralmente envolve uma definição de tipo opaco.
O GCC apenas adiciona nomes que terminam com _t
o espaço para nome reservado que você não pode usar, para evitar conflitos com versões futuras do Standard C e POSIX (manual da biblioteca GNU C) . Após algumas pesquisas, finalmente encontrei a referência correta dentro do padrão POSIX (1003.1, Justificativa (Informativa)):
B.2.12 Tipos de dados
O requisito de que tipos adicionais definidos nesta seção terminem em '' _t '' foi motivado pelo problema da poluição do espaço de nome. É difícil definir um tipo (em que esse tipo não seja definido pelo IEEE Std 1003.1-2001) em um arquivo de cabeçalho e usá-lo em outro sem adicionar símbolos ao espaço para nome do programa. Para permitir que os implementadores forneçam seus próprios tipos, todos os aplicativos em conformidade são necessários para evitar que os símbolos terminem em '' _t '', o que permite que o implementador forneça tipos adicionais. Como um uso principal de tipos está na definição de membros da estrutura, que pode (e em muitos casos deve) ser adicionado às estruturas definidas no IEEE Std 1003.1-2001, a necessidade de tipos adicionais é atraente.
Em poucas palavras, o Padrão diz que há boas chances de estender a lista de tipos de Padrão; portanto, o Padrão restringe o _t
espaço de nome para seu próprio uso.
Por exemplo, seu programa corresponde ao POSIX 1003.1 Edições 6 e você definiu um tipo foo_t
. O POSIX 1003.1 Edições 7 é finalmente lançado com um tipo recém-definido foo_t
. Seu programa não corresponde à nova versão, o que pode ser um problema. A restrição do _t
uso impede a refatoração do código. Portanto, se você busca uma conformidade com POSIX, deve definitivamente evitar o _t
que o Padrão declara.
Nota lateral: pessoalmente, eu tento manter o POSIX porque acho que ele fornece bons conceitos básicos para uma programação limpa. Além disso, gosto bastante das diretrizes do Linux Coding Style (capítulo 5) . Existem algumas boas razões para não usar o typedef. Espero que esta ajuda!
int_t
definido? Se é sempre definido comoint
, não é útil; é muito mais claro usarint
diretamente. Se nem sempre é definido comoint
(digamos, se poderia serlong int
oushort int
), então é um nome mal escolhido e confuso.