Frage von Drinkler, 39

static_assert() Fehlermeldung in c++, warum?

Hallo, wenn ich diese Zeile schreibe bekomme ich den Fehler: "[Fehler bei statischer Assertion: "Need 16 byte long double"]":

static_assert(sizeof(long double) == 16, "Need 16 byte long double");

Jedoch verstehe ich nicht warum, da dieser Code funktioniert:

static_assert(numeric_limits<unsigned char>::digits == 8, "!!!unsigned char hat hier kein 8 Bits !!!");

und das sind ja eigentlich die gleichen.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von surbahar53, 29

Die Fehlermeldung erscheint, weil auf Deinem System sizeof ( long double ) nicht 16 ist (oft 12)

Antwort
von Tschoo, 25

Was bitte schön, soll an deinen beiden Code-Zeilen gleich sein???

Kommentar von TeeTier ,

Sind auf deinem System etwa long double und unsigend char nicht gleich groß? ;)

PS: Bei embedded CPUs ist es nicht selten, dass alle Integer von char bis long gleich groß sind. Hatte letztens erst wieder mit einer Plattform zu tun gehabt, bei der es nur 32 Bit Große Integer gab, egal ob char, short, int oder long. :)

Denn C++ definiert die Größen nur als:

1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)

Und da ein Byte ja nicht immer nur aus 8 Bit bestehen muss, sondern auch gerne 32 Bit oder gar mehr einnehmen kann, ist die obige Vorgabe erfüllt und sizeof(long) == 1.

Aus diesem Grunde sind auch Dinge wie ...

const size_t int_bits = sizeof(int) * 8;

... nicht portabel, da fest angenommen wird, dass ein Byte immer 8 Bit haben muss.

Ansonsten ist deine Antwort natürlich völlig berechtigt ... sorry für den Roman. :)

Keine passende Antwort gefunden?

Fragen Sie die Community