Frage

Dies scheint eine einfache Frage, aber ich kann es nicht mit der Stack-Überlauf-Suche oder Google. Was ist eine Art von einem _t gefolgt bedeuten? Wie

int_t anInt;

Ich sehe eine Menge in C-Code sollte eng mit umgehen Hardware-I kann nicht helfen, aber denke, dass sie im Zusammenhang.

War es hilfreich?

Lösung

Wie Douglas Mayle erwähnt, es ist im Grunde bezeichnet einen Typnamen. Folglich würden Sie schlecht beraten sein, Variablen oder Funktionsnamen mit ‚_t‘ enden, da es einige Verwirrung verursachen könnte. Neben size_t definiert der C89-Standard wchar_t, off_t, ptrdiff_t, und wahrscheinlich einige andere, die ich vergessen habe. Der C99-Standard definiert eine Menge von zusätzlichen Typen wie uintptr_t, intmax_t, int8_t, uint_least16_t, uint_fast32_t, und so weiter. Diese neuen Typen sind definiert formal in <stdint.h> aber meistens werden Sie verwenden <inttypes.h> die (ungewöhnlich für Standard-C-Header) enthält <stdint.h>. It (<inttypes.h>) definiert auch Makros für die Verwendung mit dem printf() und scanf().

Als Matt Curtis erwähnt, gibt es keine Bedeutung für die Compiler in dem Suffix; es ist eine Mensch-orientierte Konvention.

Sie sollten jedoch auch, dass die POSIX eine Menge zusätzlicher Typnamen definiert Endung ' _t‘und behält sich das Suffix für die Umsetzung. Das bedeutet, dass, wenn Sie auf POSIX-bezogene Systeme arbeiten mit der Konvention Ihren eigenen Typnamen definieren, ist schlecht beraten. Das System arbeite ich an hat es getan (für mehr als 20 Jahre); wir durch Systeme erhalten gestolpert regelmäßig Typen mit dem gleichen Namen definieren, wie wir definieren.

Andere Tipps

Es ist eine Konvention für die Benennung von Datentypen verwendet, beispiel mit typedef:


typedef struct {
  char* model;
  int year;
...
} car_t;

Die _t in der Regel wickelt eine undurchsichtige Typdefinition.

GCC lediglich Namen hinzufügen, die mit _t zu dem reservierten Namespace beenden können Sie nicht verwenden, um Konflikte zu vermeiden mit zukünftigen Versionen von Standard C und POSIX (GNU C-Bibliothek-Handbuch) . Nach einigen Recherchen fand ich endlich die richtige Referenz in dem POSIX-Standard (1003.1, Rationale (informativ)):

  

B.2.12 Datentypen

     

Die Anforderung, dass weitere Typen in diesem Abschnitt Ende in ‚‚'t‘definiert‘ durch die aufgefordert wurde   Problem der Namensraumverschmutzung. Es ist schwierig, einen Typ zu definieren (wobei diese Art nicht eins ist   definiert durch IEEE Std 1.003,1 bis 2.001) in einer Header-Datei und es verwendet, in einem anderen, ohne Zusatz Symbole   auf den Namensraum des Programms. Damit Implementierer ihre eigene Art zu schaffen, die alle   konforme Anwendungen erforderlich sind Symbole zu vermeiden, in ‚‚'t‘endet‘, die ermöglicht,   Implementierer weitere Typen zur Verfügung zu stellen. Da ein großer Einsatz von Arten ist in der Definition von   Strukturelemente, die (und in vielen Fällen müssen) zu den in definierten Strukturen hinzugefügt werden,   IEEE Std 1.003,1-2001, die Notwendigkeit für zusätzliche Arten ist zwingend.

Auf dem Punkt gebracht, die Norm sagt, dass es gute Chancen für die Erweiterung der Liste Standardtypen, also die Standard-schränkt die _t Namespace für den eigenen Gebrauch.

Zum Beispiel Ihr Programm matchs POSIX 1003.1 Probleme 6 und Sie einen Typ foo_t definiert. POSIX 1003.1 Fragen 7 wird schließlich mit einer neu definierten Typ foo_t freigegeben. Ihr Programm entspricht nicht die neue Version, die ein Problem sein könnte. die _t Nutzung zu beschränken verhindert, dass der Code Refactoring. Wenn Sie also auf eine POSIX-Konformität wollen, sollten Sie auf jeden Fall die _t vermeiden, da die Norm heißt es.

Side Hinweis: persönlich, ich versuche POSIX zu bleiben, weil ich denke, es ist gut Grundlagen für eine saubere Programmierung gibt. Außerdem bin ich ziemlich gern Linux Coding Style (Kapitel 5) Richtlinien. Es gibt einige gute Gründe, warum nicht mit typedef. Hoffe, dass diese Hilfe!

Es ist eine Standard-Namenskonvention für Datentypen, in der Regel durch typedefs definiert. Viele C-Code, der mit Hardware-Registern beschäftigt verwendet C99 definierte Standardnamen für signierte und unsignierte fester Größe Datentypen. Als Konvention sind diese Namen in einer Standard-Header-Datei (stdint.h) und mit _t beenden.

Die _t von Natur aus keine besondere Bedeutung haben. Aber es hat sich in den allgemeinen Gebrauch gefallen die _t Suffix typedef ist hinzuzufügen.

Sie können für Variablennamen mit gemeinsamen C-Praktiken vertraut sein ... Das ist ähnlich, wie es üblich ap an der Vorderseite für einen Zeiger zu halten, und einen Unterstrich vor den globalen Variablen zu verwenden (das ist ein bisschen weniger häufig), und die Variablennamen i, j und k für temporäre Schleifenvariablen zu verwenden.

Im Code, wo Wortgröße und Bestellung wichtig ist, dann ist es sehr häufig benutzerdefinierte definierte Typen zu verwenden, die ausdrücklich sind, wie BYTE WORD (normalerweise 16 Bit) DWORD (32-Bit).

int_t ist nicht so gut, weil die Definition von int zwischen Plattformen variiert - so deren int konform sind Sie? (Obwohl in diesen Tagen, die meisten PC-zentrierte Entwicklung behandelt sie als 32 Bit, viel Material für Nicht-PC-Entwicklung noch int die als 16-Bit-Behandlung).

Es ist nur eine Konvention, das bedeutet „Typ“. Es bedeutet nichts Besonderes an den Compiler.

Es bedeutet ein. size_t ist die Größe Art.

Es gab ein paar gute Erklärungen über das Thema. Nur hinzufügen, einen weiteren Grund für die Neudefinition der Art:

In vielen Embedded-Projekten werden alle Arten neu definiert richtig die gegebene Dimensionierung auf die Arten zu erklären, und Portabilität über verschiedene Plattformen hinweg zu verbessern (d Hardwaretypen Compiler).

Ein weiterer Grund wird es sein, den Code portabel zwischen verschiedenen Betriebssystemen zu machen und Kollisionen mit bestehenden Typen in dem O zu vermeiden, die Sie in Ihrem Code integrieren. Dazu in der Regel ein einmaliger (wie möglich) Präfix hinzugefügt wird.

Beispiel:

typedef unsigned long dc_uint32_t;

Wenn Sie mit Hardware-Interface-Code zu tun, der Autor des Codes an Sie suchen könnte int_t haben definiert eine bestimmte Größe integer zu sein. Der C-Standard nicht eine bestimmte Größe an den int zuordnen (es auf Ihrem Compiler und Zielplattform abhängig ist, potentiell) und einen spezifischen int_t Typ verwendet würde, dass die Portabilität Problem vermeiden.

Dies ist ein besonders wichtiger Aspekt für die Hardware-Interface-Code, der sein kann, warum Sie haben zuerst die Konvention es bemerkt.

Zum Beispiel in C99, /usr/include/stdint.h:

typedef unsigned char           uint8_t;
typedef unsigned short int      uint16_t;
#ifndef __uint32_t_defined
typedef unsigned int            uint32_t;
# define __uint32_t_defined
#endif
#if __WORDSIZE == 64
typedef unsigned long int       uint64_t;
#else
__extension__
typedef unsigned long long int  uint64_t;
#endif

_t immer bedeutet, definiert durch typedef.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top