ctype.h仍然需要unsigned char吗?

时间:2013-07-31 16:29:19

标签: c undefined-behavior c11 ctype

传统上,严格来说,将signed char传递给ctype.h谓词是一个错误,因为它们只定义为-1到255,所以-128到-2可能会结束在数组边界外读取。

这是否已修复,或者您是否仍然严格地说必须使用unsigned char来避免在现代版本的C中出现未定义的行为?

1 个答案:

答案 0 :(得分:11)

  

你是否仍然严格地说必须使用unsigned char来避免在现代版本的C中出现未定义的行为?

是的,来自C11 draft standard部分7.4 字符处理&lt; ctype.h&gt; 1 说(强调我的< / em>的):

  

标头声明了几个对分类和映射有用的函数   在所有情况下,参数都是一个int,其值应为   可表示为无符号字符或等于宏EOF的值。如果   参数有任何其他值,行为未定义

这也适用于draft C99 standard,您可以在同一部分找到它。