Das _t
umschließt normalerweise eine undurchsichtige Typdefinition.
GCC fügt lediglich Namen hinzu, die mit _t
dem reservierten Namespace enden , den Sie möglicherweise nicht verwenden, um Konflikte mit zukünftigen Versionen von Standard C und POSIX (GNU C-Bibliothekshandbuch) zu vermeiden . Nach einigen Recherchen fand ich schließlich die richtige Referenz im POSIX-Standard (1003.1, Begründung (informativ)):
B.2.12 Datentypen
Die Anforderung, dass zusätzliche in diesem Abschnitt definierte Typen mit '' _t '' enden, wurde durch das Problem der Verschmutzung des Namensraums ausgelöst. Es ist schwierig, einen Typ (wobei dieser Typ nicht durch IEEE Std 1003.1-2001 definiert ist) in einer Header-Datei zu definieren und in einer anderen zu verwenden, ohne dem Namensraum des Programms Symbole hinzuzufügen. Damit Implementierer ihre eigenen Typen bereitstellen können, müssen alle konformen Anwendungen Symbole vermeiden, die mit '' _t '' enden, wodurch der Implementierer zusätzliche Typen bereitstellen kann. Da die Definition von Strukturelementen hauptsächlich von Typen verwendet wird, die zu den in IEEE Std 1003.1-2001 definierten Strukturen hinzugefügt werden können (und in vielen Fällen müssen), ist der Bedarf an zusätzlichen Typen zwingend.
Kurz gesagt, der Standard sagt, dass es gute Chancen gibt, die Liste der Standardtypen zu erweitern, daher beschränkt der Standard den _t
Namespace für seine eigene Verwendung.
Zum Beispiel stimmt Ihr Programm mit POSIX 1003.1 Issues 6 überein und Sie haben einen Typ definiert foo_t
. POSIX 1003.1 Issues 7 wird schließlich mit einem neu definierten Typ veröffentlicht foo_t
. Ihr Programm stimmt nicht mit der neuen Version überein, was möglicherweise ein Problem darstellt. Durch die Einschränkung der _t
Verwendung wird verhindert, dass der Code umgestaltet wird. Wenn Sie also eine POSIX-Konformität anstreben, sollten Sie dies unbedingt vermeiden, _t
wie es der Standard vorschreibt.
Randnotiz: Ich persönlich versuche, mich an POSIX zu halten, weil ich denke, dass es gute Grundlagen für eine saubere Programmierung bietet. Darüber hinaus mag ich die Richtlinien für Linux Coding Style (Kapitel 5) sehr gern . Es gibt einige gute Gründe, warum Sie nicht typedef verwenden. Ich hoffe das hilft!
int_t
definiert? Wenn es immer definiert ist alsint
, ist es nicht nützlich; Es ist viel klarer,int
direkt zu verwenden . Wenn es nicht immer definiert ist alsint
(sagen wir, ob es sein könntelong int
odershort int
), dann ist es ein schlecht gewählter und verwirrender Name.