Was ist der Unterschied zwischen UInt8
und uint8_t
oder UInt16
und unit16_t
?
Was bedeutet die _t
implizieren?
Benutzer1845029
Was ist der Unterschied zwischen UInt8
und uint8_t
oder UInt16
und unit16_t
?
Was bedeutet die _t
implizieren?
In C99 wurden die verfügbaren grundlegenden Integer-Typen (die ohne _t) als unzureichend angesehen, da ihre tatsächlichen Größen auf verschiedenen Systemen variieren können.
Daher enthält der C99-Standard Definitionen mehrerer neuer Integer-Typen, um die Portabilität von Programmen zu verbessern. Die neuen Typen sind besonders nützlich in eingebetteten Umgebungen.
Alle neuen Typen werden mit einem _t angehängt und sind garantiert systemübergreifend einheitlich definiert.
Weitere Informationen finden Sie unter Abschnitt über Ganzzahltypen mit fester Breite des Wikipedia-Artikels über Stdint.
uint8_t
und uint16_t
sind tatsächlich Teil von C99. Allerdings war die Notwendigkeit fester Größen älter als C99, sodass verschiedene Codebasen mit dieser Notwendigkeit fertig wurden, indem sie ihre eigenen Typen bereitstellten. OS X definiert UInt8
und UInt16
in /usr/include/MacTypes.h.
– Benutzer557219
5. Juni 2013 um 10:56 Uhr
„Alle neuen Typen werden mit einem _t angehängt und sind garantiert systemübergreifend einheitlich definiert.“ ist nicht wahr, es gibt (u)int_leastN_t
und (u)int_fastN_t
. Sie meinten nur die Typen mit fester Breite.
– Daniel Fischer
5. Juni 2013 um 11:20 Uhr
Eigentlich wollte ich nichts darüber sagen, dass ihre Größen auf allen Systemen gleich sind. Die tatsächlichen Größen sind, wie Sie bereits erwähnt haben, nur für Typen mit fester Breite (genaue Breite) garantiert einheitlich. Die Definitionen sind jedoch in allen Systemen gleich. Beispielsweise ist int_leastN_t als kleinster Typ definiert, der in der Implementierung verfügbar ist. Die Definition ist unabhängig vom System gleich.
– vdbuilder
5. Juni 2013 um 11:32 Uhr
Der Hauptunterschied besteht darin, dass die uintX_t
Typen sind Standard-C, definiert durch C99 und später, während UIntX
ist nicht. Dies hat Auswirkungen darauf, wie portabel der Code ist. Code verwenden uintX_t
Typen können auf jedem Standard-C-Compiler ohne weitere Abhängigkeiten kompiliert werden. Code, der verwendet UIntX
Andererseits müssen diese Typen entweder selbst definiert werden oder von einer Bibliothek oder einem Framework abhängen, das dies tut.
Ich glaube nicht, dass Objective-C als solches zusätzliche Integer-Typen definiert, aber es kann durchaus sein, dass Ihr Framework (Coacoa, OpenStep?) dies tut. Wenn Ihr Code außerhalb des Frameworks keinen Sinn ergibt, verwenden Sie das, was im Framework-Kontext idiomatisch ist. Versuchen Sie ansonsten, sich an die Standardtypen zu halten.
normalerweise werden sie als typedef-Datentypen verwendet. “_t” steht für einen typedef-Datentyp. Wir vergeben solche Namen, damit sie in der gesamten Datei oder großen Codebasis verwendet und leicht gelesen werden können.
*UInt8 und uint8_t – Char*
typedef unit8_t unsigned char
*UInt16 und unit16_t*
typedef unit16_t unsigned int (auf einem 16-Bit-Compiler)
_t
= Plattformübergreifende Implementierung eines Standarddatentyps.– sgarizvi
5. Juni 2013 um 10:27 Uhr
Ich finde
_t
steht fürtype
und es ist eine Konvention, die auf Linux-Systemen und an vielen Stellen in verwendet wirdC
undC++
Standard. Der Unterschied zwischenUint8
unduint8_t
hängt von der Implementierung ab, aber normalerweise sind beide 8-Bit-Ganzzahlen ohne Vorzeichen. Ebenfallsuint8_t
unduint16_t
werden durch den C- (und möglicherweise C++-) Standard in definiertstdint.h
Header,Uint8
undUint16
sind meines Wissens nach nicht genormt.– jcxz
5. Juni 2013 um 10:29 Uhr