Frage

Was ist der beste Weg, um einen Integer-Typen zu deklarieren, die immer 4 Byte auf beliebigen Plattformen sind? Ich mache mich keine Sorgen über bestimmtes Gerät oder alte Maschinen, die 16-Bit-int hat.

War es hilfreich?

Lösung

#include <stdint.h>

int32_t my_32bit_int;

Andere Tipps

C nicht selbst mit genauen Größen von Integer-Typen sehr viel nicht betrifft, C99 stellt den Header stdint.h , das ist wahrscheinlich die beste Wahl. Fügen Sie das, und Sie können zum Beispiel verwenden int32_t. Natürlich sind nicht alle Plattformen könnte, dass unterstützen.

Corey Antwort ist korrekt für die „beste“, meiner Meinung nach, aber ein einfaches „int“ wird auch in der Praxis (vorausgesetzt, dass Sie Systeme mit 16-Bit-int sind zu ignorieren) arbeiten. An diesem Punkt hängt so viel Code auf int sein 32-Bit, dass Systemanbieter wollen es nicht ändern.

(Siehe auch, warum lang 32-Bit auf vielen 64-Bit-Systeme und warum haben wir "long long").

Einer der Vorteile von int32_t verwenden, obwohl, ist, dass Sie nicht um dieses Problem zu verewigen!

Sie können eine Kopie von Brian Gladmans brg_types.h jagen, wenn Sie stdint.h nicht haben.

brg_types.h werden die Größen der verschiedenen ganzen Zahlen auf Ihrer Plattform entdecken und typedefs für die gängigen Größen erstellen. 8, 16, 32 und 64 Bits

Sie müssen inttypes.h statt stdint.h enthalten, da stdint.h auf einigen Plattformen wie Solaris nicht verfügbar ist, und inttypes.h wird stdint.h für Sie auf Systeme wie Linux enthalten. Wenn Sie inttypes.h dann Ihr Code ist portabel zwischen Linux und Solaris sind.

Dieser Link erklärt, was ich sage: HP Link zu inttypes.h

Und diese Verbindung hat eine Tabelle, die zeigt, warum Sie nicht möchten, long oder int verwenden, wenn Sie die Absicht, eine bestimmte Anzahl von Bits in der Datentyp vorhanden ist haben. IBM Link über portable Datentypen

Wenn stdint.h für Ihr System nicht verfügbar ist, zueigen machen. Ich habe immer eine Datei mit dem Namen „types.h“, der typedefs für alle mit / ohne Vorzeichen 8, 16 und 32-Bit-Werte haben.

auch auf Ihren Zielplattformen ab, die Sie Autotools für Ihr Build-System verwenden können,

es wird sehen, ob stdint.h / inttypes.h existieren und, wenn sie nicht angemessen typedefs in einem „config.h“ erstellen

stdint.h ist die offensichtliche Wahl, aber es ist nicht unbedingt zur Verfügung.

Wenn Sie eine tragbare Bibliothek verwenden, ist es möglich, dass es bereits portable feste Breite ganze Zahlen liefert. Zum Beispiel hat SDL Sint32 (S ist für „unterzeichnet“) und GLib hat gint32.

C99 oder später

Mit <stdint.h>.

Wenn Sie Ihre Implementierung der unterstützt 2 Ergänzung 32-Bit-Integer dann muss es int32_t definieren.

Wenn nicht, dann die nächste beste Sache ist int_least32_t, die ein Integer-Typ durch die Implementierung unterstützt wird, die mindestens 32 Bit, unabhängig von Darstellung (Zweierkomplement, Einerkomplement usw.).

Es gibt auch die int_fast32_t eine ganze Zahl Typ mindestens 32 Bit breit, mit der Absicht gewählt, um es dem schnellsten Operationen für diese Größe Anforderung.

ANSI C

Sie können mit long, die von der Norm festgelegten mindestens 32 Bit breit sein als Ergebnis der Mindestbereichsanforderungen gewährleistet ist.

Wenn Sie lieber die kleinste Integer-Typ verwenden, würde eine 32-Bit-Zahl passen, dann können Sie Präprozessoranweisungen wie die folgenden mit den in <limits.h> definierten Makros verwenden:

#define TARGET_MAX 2147483647L

#if   SCHAR_MAX >= TARGET_MAX
  typedef signed char int32;
#elif SHORT_MAX >= TARGET_MAX
  typedef short int32;
#elif INT_MAX   >= TARGET_MAX
  typedef int int32;
#else
  typedef long int32;
#endif

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