Forum: Compiler & IDEs Wertebereich unterschreiten


von GCC Nutzer (Gast)


Lesenswert?

Hi,

gibt es irgend eine Vorgabe, was passiert, wenn man auf eine uint8_t 
Variable, welche den Inhalt 0x00 hat den decrement Operator anwendet? 
Oder ist das verhalten unbestimmt?

Gruß

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Definiert 255.

von Jasch (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> Definiert 255.

Aber Vorsicht!

Fuer signed-Typen ist das Verhalten bei Overflow schon nicht mehr 
definiert...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Jasch schrieb:

> Fuer signed-Typen ist das Verhalten bei Overflow schon nicht mehr
> definiert...

Richtig.  Auch bei "unsigned char" ist es nicht wirklich sicher,
da könnte bspw. auch 0xffffffff rauskommen (wenn char nämlich 32
bit breit ist).  Aber bei "uint8_t" ist es sicher.

von Rolf Magnus (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> Jasch schrieb:
>
>> Fuer signed-Typen ist das Verhalten bei Overflow schon nicht mehr
>> definiert...
>
> Richtig.  Auch bei "unsigned char" ist es nicht wirklich sicher,
> da könnte bspw. auch 0xffffffff rauskommen (wenn char nämlich 32
> bit breit ist).

Mir ist jetzt keine GCC-Zielarchitektur bekannt, bei der das so wäre.

> Aber bei "uint8_t" ist es sicher.

Wenn es einen uint8_t gibt, dann ist es auch für unsigned char sicher 
;-)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Rolf Magnus schrieb:

> Mir ist jetzt keine GCC-Zielarchitektur bekannt, bei der das so wäre.

Ich kenne derartige Architekturen auch nur vom Hörensagen und weiß
nicht, ob's dafür dann einen GCC-Port gibt.  Allerdings fällt in den
GCC-Quellen und -Tests auf, dass an vielen Stellen _CHAR_BIT_
explizit gefragt wird statt einfach anzunehmen, es hätte konstant den
Wert 8.  Das legt zumindest den Schluss nahe, dass schonmal jemand
den Versuch unternommen hat, GCC auf derartige Architekturen zu
portieren.

von (prx) A. K. (prx)


Lesenswert?

Rolf Magnus schrieb:

> Mir ist jetzt keine GCC-Zielarchitektur bekannt, bei der das so wäre.

Ich hatte mal mit einer Architektur zu tun, die keine 16-Bit Datentypen 
unterstützte. Da war logischerweise short=int=32bit.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.