10 Stimmen

Größengarantie für ganzzahlige/arithmetische Typen in C und C++

Ich weiß, dass der C++-Standard ausdrücklich nur die Größe von char , signed char y unsigned char . Außerdem gibt es Garantien, dass z. B., short ist mindestens so groß wie char , int so groß wie short usw. Aber keine ausdrücklichen Garantien über den absoluten Wert von, sagen wir, sizeof(int) . Das war die Information in meinem Kopf, und ich habe mich damit abgefunden. Vor einiger Zeit stieß ich jedoch auf einen Kommentar in SO (kann ihn nicht mehr finden), dass in C long ist garantiert mindestens 4 Byte groß, und diese Anforderung wird von C++ "geerbt". Ist das der Fall? Wenn ja, welche anderen impliziten Garantien gibt es für die Größe von arithmetischen Typen in C++? Bitte beachten Sie, dass ich absolut nicht interessiert bin an praktisch Garantien über verschiedene Plattformen hinweg in dieser Frage, nur theoretisch ein.

1voto

In silico Punkte 49539

Der C-Standard sagt nicht ausdrücklich, dass long muss mindestens 4 Byte groß sein, aber es wird ein Mindestbereich für die verschiedenen Integraltypen angegeben, was eine Mindestgröße impliziert.

Zum Beispiel ist die Mindestreichweite einer unsigned long ist 0 bis 4.294.967.295. Man braucht mindestens 32 Bits, um jede einzelne Zahl in diesem Bereich darzustellen. Also ja, der Standard garantiert (indirekt), dass eine long mindestens 32 Bit beträgt.

C++ erbt die Datentypen von C, Sie müssen sich also den C-Standard ansehen. Der C++-Standard verweist in diesem Fall tatsächlich auf Teile des C-Standards.

1voto

Jean-Marc Valin Punkte 304

Achten Sie nur darauf, dass manche Rechner Zeichen haben, die mehr als 8 Bit lang sind. Zum Beispiel, IIRC auf dem TI C5x, ein lang ist 32 Bit, aber sizeof(long)==2, weil chars, shorts und ints sind alle 16 Bit mit sizeof(char)==1.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X