C-Standardbibliothek<inttypes.h>

In der C-Programmierung müssen wir bei der Behandlung von Ganzzahltypen oft sicherstellen, dass Code über verschiedene Plattformen hinweg portabel ist. Verschiedene Plattformen können unterschiedliche Ganzzahlgrößen und -darstellungen haben, was dazu führen kann, dass sich Code in verschiedenen Umgebungen inkonsistent verhält.

Um die oben genannten Probleme zu lösen, bietet die C-Standardbibliothek<inttypes.h>Die Header-Datei, die eine Reihe von Ganzzahltypen fester Größe und entsprechende Formatierungsmakros definiert und Entwicklern hilft, portablen Code zu schreiben.

inttypes.hist eine sehr wichtige Header-Datei in der C-Standardbibliothek. Sie bietet eine Reihe von Ganzzahltypen mit fester Breite und entsprechende Formatierungsmakros. Durch die Verwendung dieser Typen und Makros können Entwickler sicherstellen, dass Ganzzahlgrößen und formatierte Ausgaben auf verschiedenen Plattformen konsistent sind und so potenzielle Probleme vermieden werden.

Ganzzahltypen mit fester Breite

inttypes.hdefiniert eine Reihe von Ganzzahltypen mit fester Breite, die auf verschiedenen Plattformen dieselbe Größe haben. Die folgenden Ganzzahltypen mit fester Breite sind gebräuchlich:

  • int8_t: 8-Bit-Ganzzahl mit Vorzeichen
  • uint8_t: 8-Bit-Ganzzahl ohne Vorzeichen
  • int16_t: 16-Bit-Ganzzahl mit Vorzeichen
  • uint16_t: 16-Bit-Ganzzahl ohne Vorzeichen
  • int32_t: 32-Bit-Ganzzahl mit Vorzeichen
  • uint32_t: 32-Bit-Ganzzahl ohne Vorzeichen
  • int64_t: 64-Bit-Ganzzahl mit Vorzeichen
  • uint64_t: 64-Bit-Ganzzahl ohne Vorzeichen

Diese Typen stellen sicher, dass Ganzzahlgrößen auf verschiedenen Plattformen konsistent sind, wodurch die Portabilität des Codes verbessert wird.

Formatierungsmakros

inttypes.hdefiniert außerdem eine Reihe von Formatierungsmakros, die inprintfundscanfzum Formatieren von Ganzzahltypen mit fester Breite in Funktionen wie verwendet werden. Diese Makros stellen sicher, dass die formatierte Ausgabe von Ganzzahlen auf verschiedenen Plattformen konsistent ist.

Die folgenden Formatierungsmakros sind gebräuchlich:

  • PRId8: Wird zum Formatieren verwendetint8_tvorzeichenbehaftete Ganzzahl des Typs
  • PRIu8: Wird zum Formatieren verwendetuint8_tvorzeichenlose Ganzzahl des Typs
  • PRId16: Wird zum Formatieren verwendetint16_tvorzeichenbehaftete Ganzzahl des Typs
  • PRIu16: Wird zum Formatieren verwendetuint16_tvorzeichenlose Ganzzahl des Typs
  • PRId32: Wird zum Formatieren verwendetint32_tvorzeichenbehaftete Ganzzahl des Typs
  • PRIu32: Wird zum Formatieren verwendetuint32_tvorzeichenlose Ganzzahl des Typs
  • PRId64: Wird zum Formatieren verwendetint64_tvorzeichenbehaftete Ganzzahl des Typs
  • PRIu64: Wird zum Formatieren verwendetuint64_tvorzeichenlose Ganzzahl des Typs

Diese Makros werden wie folgt verwendet:

Beispiel

#include <stdio.h>
#include <inttypes.h>

int main() {
    int32_t myInt = 42;
    printf("The value of myInt is: %" PRId32 "\n", myInt);
    return 0;
}

Im obigen Code,PRId32Makro zur Formatierungint32_tTyp einer vorzeichenbehafteten Ganzzahl, der eine konsistente Ausgabe über verschiedene Plattformen hinweg gewährleistet.

Das Ausgabeergebnis ist:

The value of myInt is: 42

Andere Makros

inttypes.hdefiniert außerdem einige andere nützliche Makros, zum Beispiel:

  • INT8_MIN、INT8_MAX:int8_tdie Minimal- und Maximalwerte des Typs
  • UINT8_MAX:uint8_tMaximalwert des Typs
  • INT16_MIN、INT16_MAX:int16_tdie Minimal- und Maximalwerte des Typs
  • UINT16_MAX:uint16_tMaximalwert des Typs
  • INT32_MIN、INT32_MAX:int32_tdie Minimal- und Maximalwerte des Typs
  • UINT32_MAX:uint32_tMaximalwert des Typs
  • INT64_MIN、INT64_MAX:int64_tdie Minimal- und Maximalwerte des Typs
  • UINT64_MAX:uint64_tMaximalwert des Typs

Diese Makros können Entwicklern helfen, Ganzzahltypen mit fester Breite im Code sicher zu verwenden und Überläufe sowie andere potenzielle Probleme zu vermeiden.

Beispiel

Das Folgende ist eine Verwendung voninttypes.hist ein vollständiges Beispiel, das zeigt, wie man Ganzzahltypen mit fester Breite und ihre Formatierungsmakros definiert und verwendet:

Beispiel

#include <stdio.h>
#include <inttypes.h>

int main() {
    int32_t myInt = 42;
    uint64_t myUInt = 1234567890123456789ULL;

    printf("The value of myInt is: %" PRId32 "\n", myInt);
    printf("Der Wert von myUInt ist: %" PRIu64 "\n", myUInt);

    printf("Der minimale Wert von int32_t ist: %" PRId32 "\n", INT32_MIN);
    printf("Der maximale Wert von uint64_t ist: %" PRIu64 "\n", UINT64_MAX);

    return 0;
}

Das Ausgabeergebnis ist:

The value of myInt is: 42
The value of myUInt is: 1234567890123456789
The minimum value of int32_t is: -2147483648
The maximum value of uint64_t is: 18446744073709551615

Im obigen Code haben wir eineint32_tvorzeichenbehaftete Ganzzahl vom Typ und eineuint64_tArt vorzeichenloser Ganzzahl definiert und die entsprechenden Formatierungsmakros verwendet, um sie auszugeben. Wir haben außerdemINT32_MINundUINT64_MAXMakros verwendet, um die Minimal- und Maximalwerte dieser Typen auszugeben.

Weitere Erweiterungen