CHAR_MIN, CHAR_MAX

10/10/2016 - 17:23 von Helmut Schellong | Report spam
Das Verhalten des gcc war in Bezug auf 'char'
vor làngerer Zeit anders als heute.

Ich vermute, wegen der Möglichkeit von Padding-Bits seit C99.

Früher hatte -funsigned-char den Compiler ruhiggestellt.
Wenn man durchgehend 'unsigned char' verwendete, bei Lib-Funktionen
mit 'char' und bei 'x= k>0 ? ucharptr : "Len"', gab es kein Gemecker.
So als ob jegliches 'char' wirklich als 'unsigned char' angesehen
würde, also auch "abc".

Heute jedoch erhàlt man dabei z.B. 1000 Warnmeldungen.
Hauptsàchlich wegen (angeblich) unterschiedlicher Vorzeichenbehaftung.

Ich verwende grundsàtzlich -funsigned-char und sichere meine Programme
so ab:
#if CHAR_MIN != 0
# error "Option -funsigned-char (o.vglb.) fehlt!"
#endif

Heute muß ich
#define byte char
statt
#define byte unsigned char
geben.
Andernfalls erhalte ich nnnn Warnungen, trotz -funsigned-char.

-funsigned-char bewirkt aber doch:
CHAR_MIN = 0
CHAR_MAX = 255
und der Compiler verwendet grundsàtzlich 'movzx' in Assembler, wenn
es um 'char' geht! Er behandelt 'char' konkret, als ob es wirklich
'unsigned char' wàre!
Meckert aber, wenn 'unsigned char' gemeinsam mit 'char' verwendet wird.

Es wird /heute/ also den unterschiedlichen Bezeichnern (dem literalen
Unterschied) 'char' und 'unsigned char' Vorrang eingeràumt gegenüber
der konkret vorliegenden Realitàt:
char: 0..255
unsigned char: 0..255
wird ignoriert.
Warnungen über unterschiedliche Signedness sind hier eine Falschaussage!
Weil _beide_ Typen tatsàchlich kein Vorzeichen haben.

Die drei char-Typen sind unterschiedliche Typen, laut Standard. Ja.
Aber die Behauptungen der unterschiedlichen Signedness und inkompatiblen
Pointern ist oben dennoch falsch.



Mit freundlichen Grüßen
Helmut Schellong var@schellong.biz
www.schellong.de www.schellong.com www.schellong.biz
http://www.schellong.de/c.htm
 

Lesen sie die antworten

#1 Thomas Koenig
11/10/2016 - 08:10 | Warnen spam
Helmut Schellong schrieb:

Heute jedoch erhàlt man dabei z.B. 1000 Warnmeldungen.
Hauptsàchlich wegen (angeblich) unterschiedlicher Vorzeichenbehaftung.



Hast du auch einen Testfall, der das demonstriert? So allgemein kann
man mit der Aussage erst mal nix anfangen.

Ähnliche fragen