ctype.h仍然需要unsigned char吗?

rwa*_*ace 10 c ctype undefined-behavior c11

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

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

Sha*_*our 11

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

是的,从C11标准草案部分7.4 字符处理<ctype.h>1段说(强调我的):

标头声明了几个用于分类和映射字符的函数.198)在所有情况下,参数都是一个int,其值应表示为unsigned char或者等于宏EOF的值.如果参数具有任何其他值,则行为未定义.

这也适用于草案C99标准,您可以在同一部分找到它.