Zwischen int32
und int32_t
, (und ebenso zwischen int8
und int8_t
) ist der Unterschied ziemlich einfach: Der C-Standard definiert int8_t
und int32_t
, definiert aber nichts mit dem Namen int8
oder int32
- letzteres (falls überhaupt vorhanden) stammt wahrscheinlich aus einem anderen Header oder einer anderen Bibliothek (höchstwahrscheinlich) vor der Hinzufügung von int8_t
und int32_t
in C99).
Plain int
ist ganz anders als die anderen. Wo int8_t
und int32_t
jeder eine bestimmte Größe hat, int
kann eine beliebige Größe> = 16 Bit sein. Zu unterschiedlichen Zeiten waren sowohl 16 Bit als auch 32 Bit ziemlich häufig (und für eine 64-Bit-Implementierung sollten es wahrscheinlich 64 Bit sein).
Andererseits int
ist garantiert, dass es in jeder Implementierung von C vorhanden ist, wo int8_t
und int32_t
nicht. Es ist wahrscheinlich offen zu fragen, ob dies für Sie wichtig ist. Wenn Sie C auf kleinen eingebetteten Systemen und / oder älteren Compilern verwenden, kann dies ein Problem sein. Wenn Sie es hauptsächlich mit einem modernen Compiler auf Desktop- / Server-Computern verwenden, wird dies wahrscheinlich nicht der Fall sein.
Ups - habe den Teil verpasst char
. Sie würden int8_t
anstelle von char verwenden, wenn (und nur wenn) Sie möchten, dass ein ganzzahliger Typ garantiert genau 8 Bit groß ist. Wenn Sie Zeichen speichern möchten, möchten Sie wahrscheinlich char
stattdessen verwenden. Seine Größe kann variieren (in Bezug auf die Anzahl der Bits), aber es ist garantiert genau ein Byte. Eine kleine Kuriosität: Es gibt keine Garantie dafür, ob eine Ebene char
signiert oder nicht signiert ist (und viele Compiler können sie je nach einem Flag zur Kompilierungszeit zu einer machen). Wenn Sie sicherstellen möchten, dass es entweder signiert oder nicht signiert ist, müssen Sie dies explizit angeben.
bool_t
- noch nie davon gehört. Der C-Standard definiert_Bool
als eingebauten Typ.bool
wird nur definiert, wenn Sie#include <stdbool.h>
(als Makro, das erweitert wird_Bool
).Die Datentypen _t sind typedef-Typen im Header stdint.h, während int ein eingebauter grundlegender Datentyp ist. Dadurch wird das _t nur verfügbar, wenn stdint.h vorhanden ist. int hingegen ist garantiert vorhanden.
quelle
Denken Sie immer daran, dass 'Größe' variabel ist, wenn dies nicht explizit angegeben wird
Auf einigen Systemen kann der Compiler zu einer 16-Bit-Ganzzahl führen, auf anderen zu einer 32-Bit-Ganzzahl (auf neueren Systemen zu einer 64-Bit-Ganzzahl).
In eingebetteten Umgebungen kann dies zu seltsamen Ergebnissen führen (insbesondere beim Umgang mit speicherabgebildeten E / A oder als einfache Array-Situation). Es wird daher dringend empfohlen, Variablen mit fester Größe anzugeben. In Legacy-Systemen können Sie auf etwas stoßen
Ab C99 fügten die Designer die Header-Datei stdint.h hinzu, die im Wesentlichen ähnliche typedefs nutzt.
Auf einem Windows-basierten System werden möglicherweise Einträge in der Header-Datei stdin.h als angezeigt
Es gibt noch viel mehr, wie die Ganzzahl mit minimaler Breite oder die Ganzzahl mit exakter Breite. Ich denke, es ist keine schlechte Sache, stdint.h zum besseren Verständnis zu untersuchen.
quelle
typedef short INT16;
, nichttypedefs short INT16
.