Warum C-Compiler angeben, werden 32-bit und long long, 64-bit?
Wäre es denn nicht mehr Sinn machen lange 64-bit und behalten lange, bis die 128-bit-zahlen Realität werden?
InformationsquelleAutor der Frage sj755 | 2011-09-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, es macht Sinn, aber Microsoft hatte seine eigenen Gründe für die Definition von "lange", wie 32-bit.
Soweit ich weiß, von allen mainstream-Systeme, die Recht nun, Windows ist das einzige OS, wo "lange" ist 32-bit. Auf Unix-und Linux 64-bit.
Alle Compiler für Windows kompilieren "long" für 32-bit auf Windows, um die Kompatibilität mit Microsoft.
Aus diesem Grund vermeide ich die Verwendung von "int" und "long". Gelegentlich ich ' ll verwenden Sie "int" für die Fehler-codes und Boolesche Werte (in C), aber ich benutze Sie für jeden code ist abhängig von der Größe des Typs.
InformationsquelleAutor der Antwort Mysticial
C-standard NICHT angegeben haben, die bit-Länge der primitiven Datentypen, sondern nur die am wenigsten bit-Länge. So können Compiler Optionen, die auf der bit-Länge der primitiven Datentypen. Auf die Entscheidung, die bit-Länge der einzelnen primitiven Datentypen, den compiler-designer sollten die verschiedenen Faktoren, einschließlich der computer-Architektur.
hier einige Referenzen:
http://en.wikipedia.org/wiki/C_syntax#Primitive_data_types
InformationsquelleAutor der Antwort Jason Kuang
Historische Gründe. Für eine lange Zeit (Wortspiel beabsichtigt), "int" bedeutet 16-bit -; die also "lange", wie 32-bit. Natürlich, die Zeiten geändert. Daher "long long" 🙂
PS:
GCC (und andere) unterstützen derzeit 128-bit-Ganzzahlen als "(u)int128_t".
PPS:
Hier ist eine Diskussion, warum die Leute bei GCC aus den Entscheidungen, die Sie haben:
http://www.x86-64.org/pipermail/discuss/2005-August/006412.html
InformationsquelleAutor der Antwort paulsm4
C99 N1256 standard-Entwurf
Größen von
long
undlong long
Umsetzung sind definiert, alle die wir kennen, sind:5.2.4.2.1 Größen von integer-Typen
<limits.h>
gibt die minimale Größe:6.2.5 Arten sagt dann:
und 6.3.1.1 Boolean, Zeichen und ganze zahlen bestimmt die relative Konvertierung Reihen:
InformationsquelleAutor der Antwort Ciro Santilli 新疆改造中心 六四事件 法轮功
Seit den Tagen der ersten C-compiler für ein Allzweck-programmierbaren Mikrocomputer, war es oft notwendig, für code-Verwendung von Typen, die hielt genau 8, 16 oder 32 bit, aber bis 1999 der Standard nicht ausdrücklich keinerlei für Programme zu geben. Auf der anderen Seite, fast alle Compiler für 8-bit, 16-bit und 32-bit-Mikrocomputern definieren "char" mit 8 bits,
"short" mit 16 bits und "long" als 32 bit. Der einzige Unterschied zwischen Ihnen ist
ob "int" 16 bits oder 32.
Während ein 32-bit-oder größere CPU verwenden könnte, "int" als 32-bit-Typ, verlassen die "lange"
erhältlich als 64-bit-Typ gibt es einen beträchtlichen Korpus von code erwartet
das "long" für 32 bit. Während die C-Standard Hinzugefügt "Feste Größe" - Typen
in 1999, es gibt andere Orte in der Standard-noch "int" und
"lange", wie "printf". Während C99-Makros Hinzugefügt, um liefern die richtigen format
Bezeichner für fixed-sized integer-Typen, es gibt einen beträchtlichen Korpus von
code, der erwartet, dass "%ld" ist ein gültiges format specifier für int32_t, da
es wird funktionieren auf fast jedem 8-bit, 16-bit oder 32-bit-Plattform.
Ob es mehr Sinn macht, zu "lang" werden 32 bits, aus Respekt für eine
bestehende code-Basis geht Jahrzehnte zurück, oder 64 bit ist, so können Sie vermeiden, die Notwendigkeit für
der ausführlichere "long long" oder "int64_t" zu identifizieren, die 64-bit-Arten ist
wahrscheinlich ein Urteil nennen, aber angesichts der Tatsache, dass der neue code sollte wohl zugunsten der
die Verwendung der angegebenen Größe-Typen, wenn praktische, ich bin mir nicht sicher, ich sehe eine überzeugende
Vorteil der Erstellung "long" 64-bits, es sei denn, "int" ist auch die 64 bit (die
erstellen Sie noch größere Probleme mit den bestehenden code).
InformationsquelleAutor der Antwort supercat