Por lo _t
general, envuelve una definición de tipo opaco.
GCC simplemente agrega nombres que terminan _t
en el espacio de nombres reservado que no puede usar, para evitar conflictos con versiones futuras de Standard C y POSIX (manual de la biblioteca GNU C) . Después de un poco de investigación, finalmente encontré la referencia correcta dentro del Estándar POSIX (1003.1, Justificación (Informativo)):
B.2.12 Tipos de datos
El requisito de que los tipos adicionales definidos en esta sección terminen en '' _t '' fue provocado por el problema de la contaminación del espacio de nombres. Es difícil definir un tipo (donde ese tipo no es uno definido por IEEE Std 1003.1-2001) en un archivo de encabezado y usarlo en otro sin agregar símbolos al espacio de nombre del programa. Para permitir que los implementadores proporcionen sus propios tipos, todas las aplicaciones conformes deben evitar que los símbolos terminen en '' _t '', lo que permite que el implementador proporcione tipos adicionales. Debido a que el uso principal de los tipos está en la definición de los miembros de la estructura, que pueden (y en muchos casos deben) agregarse a las estructuras definidas en IEEE Std 1003.1-2001, la necesidad de tipos adicionales es convincente.
En pocas palabras, el Estándar dice que hay buenas posibilidades de extender la lista de tipos del Estándar, por lo tanto, el Estándar restringe el _t
espacio de nombres para su propio uso.
Por ejemplo, su programa coincide con POSIX 1003.1 Issues 6 y usted definió un tipo foo_t
. POSIX 1003.1 Issues 7 finalmente se lanza con un tipo recién definido foo_t
. Su programa no coincide con la nueva versión, lo que podría ser un problema. Restringir el _t
uso impide refactorizar el código. Por lo tanto, si apunta a un cumplimiento POSIX, definitivamente debe evitarlo _t
como lo establece el Estándar.
Nota al margen: personalmente, trato de mantenerme en POSIX porque creo que ofrece buenos conceptos básicos para una programación limpia. Además, soy bastante aficionado a las pautas de Linux Coding Style (capítulo 5) . Hay algunas buenas razones por las cuales no usar typedef. ¡Espero que esto ayude!
int_t
define? Si siempre se define comoint
, no es útil; es mucho más claro usarloint
directamente. Si no siempre se define comoint
(por ejemplo, si podría serlong int
oshort int
), entonces es un nombre mal elegido y confuso.