2016-06-23 12 views
-11

Wie kann die Größe des int-Datentyps unabhängig vom Compilertyp auf 32- und 64-Bit-Maschinen auf 4 Byte beschränkt werden? Muss ich stdint.h verwenden?Größe des Int-Datentyps beschränken

+5

Wählen Sie * eine * Sprache. C und C++ sind nicht dasselbe. –

+0

Hier auf SO erwarten wir ein bisschen Grad und _Research_ bevor Sie fragen. – edmz

+1

Siehe [dies] (http://en.cppreference.com/w/c/types/integer) oder [dies] (http://en.cppreference.com/w/cpp/types/integer) – NathanOliver

Antwort

10

Im Allgemeinen können Sie nicht, es sei denn, Sie schreiben Ihren eigenen Compiler.

Die Größe int ist implementation-defined, was bedeutet, dass jeder Compiler seine Größe bestimmt.

Es ist normalerweise 4 Bytes/32 Bits, aber das ist nicht garantiert. (Bytes sind nicht einmal garantiert genau 8 Bits, aber Sie sind unwahrscheinlich, dass ein System wo sie nicht sind.)

Was Sie tun können, ist sicherzustellen, dass Ihr Code wird nicht kompilieren, wenn der Compiler verwendet eine Größe, die Sie nicht mögen:

#include <limits.h> 

#if INT_MAX != 0x7FFFFFFF 
#error "This code requires 32-bit int" 
#endif 

Da Sie int gefragt, dass die Antwort ist. Wenn Sie wirklich möchten, dass Sie einen 32-Bit Integer Typ möchten, können Sie den Typ int32_t verwenden, der in <stdint.h> definiert ist, oder uint32_t, wenn Sie einen vorzeichenlosen Typ benötigen. Implementierungen, die keinen 32-Bit-Integer-Typ haben oder deren 32-Bit-Typen bestimmte Anforderungen nicht erfüllen, definieren int32_t und uint32_t nicht - aber Sie werden wahrscheinlich auch nicht auf ein solches System stoßen.

Denken Sie daran, dass int nicht nur "Integer" bedeutet; Der Typ int ist einer von mehreren Integer-Typen.

+0

@NathanOliver: Ich habe das gerade in meiner Bearbeitung vor ein paar Sekunden erwähnt. Aber die Frage wurde nach "int" gestellt, nicht über ganzzahlige Typen im Allgemeinen. –

+1

Beachten Sie auch, dass "int32_t" 32 Bit, aber nicht 4 Byte sein kann. Und es ist vielleicht auch gar nicht verfügbar - da wollen Sie schnell versagen. Lauf so weit wie möglich. – edmz

+0

@black Ist nicht 4 Bytes == 32 Bits? – mikeyq6

5

Sie können einen Compiler nicht zwingen, die Anzahl der Bits zu ändern, die er für eine int verwendet. Wenn Sie ganzzahlige Daten mit einem integrierten 32-Bit-Typ erfassen möchten, verwenden Sie int32_t.

2

Sie haben keine Kontrolle darüber, wie der Compiler seine nativen Datentypen verwaltet. Aber Sie können wählen, wie Sie sich entscheiden, sie zu verwenden. Wenn Sie zum Beispiel für 32 Bit kompilieren, verwenden Sie int32_t (immer 32 Bit). Wenn Sie für 64bit kompilieren, verwenden Sie int64_t (immer 64bit). Wenn Sie einen einzelnen Typ verwenden müssen, der sich je nach Kompilierung für 32-Bit oder 64-Bit selbst dimensionieren kann, verwenden Sie intptr_t (immer 32-Bit bzw. 64-Bit). Also ja, Sie sollten die in stdint.h definierten Typen verwenden, wenn die Anzahl der Bits in einem Integer-Typ für Sie von Bedeutung ist.