Helmut Schellong
2016-10-10 15:23:40 UTC
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.
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 ***@schellong.biz
www.schellong.de www.schellong.com www.schellong.biz
http://www.schellong.de/c.htm
Mit freundlichen Grüßen
Helmut Schellong ***@schellong.biz
www.schellong.de www.schellong.com www.schellong.biz
http://www.schellong.de/c.htm