Traditionally, it was - strictly speaking - an error to pass a signed char
to the ctype.h
predicates because they were only defined for -1 to 255, so -128 to -2 could end up in reading outside array bounds.
Was this ever fixed, or do you still strictly speaking have to use unsigned char
to avoid undefined behaviour in modern versions of C?
Yes, from the C11 draft standard section
7.4
Character handling <ctype.h> paragraph 1 says (emphasis mine):This also holds for draft C99 standard as well, you can find it in the same section.