Forum: Mikrocontroller und Digitale Elektronik AVR Inline Optimierung kaputt?


von Philipp Klaus K. (pkk)


Lesenswert?

mh schrieb:
> Philipp Klaus K. schrieb:
>> Kein falsches Ergebnis, da der C-Standard explizit sagt, dass das
>> Verhalten undefiniert ist, wenn ein Wert übergeben wird, der weder EOF
>> ist, noch in einen unsigned char passt.
>
> Bleibt noch die Frage nach dem Wert von EOF ;-)

Der muss natürlich geeignet gewählt sein (z.B. -1). Damit niemand 
unabsichtlich den Wert von EOF ändert, ohne an islower() zu denken, hat 
SDCC noch ein
1
#ifdef EOF
2
_Static_assert(!((unsigned char)EOF >= 'a' && (unsigned char)EOF <= 'z'), "EOF out of range - ");
3
#endif

in ctype.h.

: Bearbeitet durch Moderator
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Jörg W. schrieb:
> Philipp Klaus K. schrieb:
>> Kein falsches Ergebnis, da der C-Standard explizit sagt, dass das
>> Verhalten undefiniert ist, wenn ein Wert übergeben wird, der weder EOF
>> ist, noch in einen unsigned char passt.
>
> Na gut. :)

In diesem Falle würde übrigens ich, wenn ich das genau so 
implementiere, diese beiden Details (unsigned Vergleich benutzt, weil er 
üblicherweise schneller ist, Übergabe eines Zeichens, das nicht EOF ist 
und nicht in unsigned char passt, triggert UB) als Kommentar im 
Quelltext hinterlassen, denn das ist alles andere als offensichtlich.

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.