Re: [PATCH] Add cast to unsigned char to strverscmp
Hans-Bernhard Bröker <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <[email protected]> |
Am 08.11.2024 um 12:41 schrieb Christian Franke: > Corinna Vinschen wrote: >> On Nov 7 13:58, Joel Sherrill wrote: >> Given that l and r are unsigned char anyway, the entire expression >> is unsigned, so there shouldn't be a sign-compare error in newlib's >> version. > It's actually signed, IIRC due to changing 'unsigned preserving' (K&R C) > to 'value preserving' (C89) implicit conversions. The reason it's signed is because '1' is a signed integer, so this expression has a type train of: ((unsigned char) - (signed int)) < (unsigned int) The left hand side of the < operator is signed int on all but the very weirdest architectures (think sizeof(int) == 1), as unsigned char undergoes integer promotion to signed int on those. As to using U'1' to work around this quirk: that's a C11-ism. YMMV.