zitter_ned_aso schrieb:
> return *(unsigned char *)l - *(unsigned char *)r;
> Wegen integer promotion wird doch die Subtraktion mit int's durchgeführt
> und dann das Ergebnis einem int-Rückgabewert zugewiesen. Also ist diese
> Typumwandlung an dieser Stelle gar nicht nötig.
nach langem Überlegen:
Integer promotion findet natürlich statt. Allerdings werden da falsche
Zahlen zu Integer's befördert weil es bei den Buchstaben mit dem
ASCII-Code > 127 einen Überlauf gibt (bei signed char). Und diese,
falsche Zahl, wird nach "int" umgewandelt.
Bei mir funktioniert's übrigens auch wenn BEIDE Buchstaben >127 sind
ohne explizite Typumwandlung.
Dann gibt es ja für beide einen Überlauf, aber der Abstand bleibt ja
trotzdem gleich. Aber so ein Überlauf ist ja bei signed-Werten nicht
definiert.Wenn es nur bei einem Buchstaben diesen Überlauf gibt, dann
geht die Version ohne explizites Casten in die Hose.
Und dann habe ich noch eine Frage:
Warum wird die erste Variante akzeptiert und bei der zweiten - gewarnt?
1 | char str1[]="ü";
|
2 | char str2[]={'ü','\0'};
|