Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

signed char and unsigned char:

  • Can be used Suitable for small integer values.

"plain" char:

...

  • The type of each element of a string literal.
  • Used for character data (where signedness has little meaning) as opposed to integer data.

...

  • Used for data that could be either EOF (a negative value) or character data interpreted as unsigned char and then converted to int.  Therefore, returned by fgetc(), getc(), getchar(), and ungetc().Therefore  Also, accepted by the character handling functions ( from <ctype.h>), because they might be passed the result of fgetc() et al.
  • The type of a character constant.  Its value is that of a plain char converted to int.

unsigned char:

  • Used internally for string comparison functions, even though these operate on character data.  Therefore, the result of a string comparison does not depend on whether plain char is signed or not.
  • Used for situations where the object being manipulated might be of any type, and it is necessary to access all bits of that object, as with fwrite().

Note that the two different ways a character is used as an int (as an unsigned char + EOF, or as a plain char, converted to int) can lead to confusion.  For example, isspace('\200') results in undefined behavior.

Recommendations

STR00-A. Use TR 24731 for remediation of existing string manipulation code

...