2013-07-31 88 views
9

传统上,它严格来说是将signed char传递给ctype.h谓词的错误,因为它们仅被定义为-1到255,所以-128到-2最终可能会读取数组范围外。ctype.h是否仍然需要unsigned char?

这是否曾经修复过,还是严格来说你必须使用unsigned char来避免现代版本C中的未定义行为?

+0

现代节目只有越来越多的机会面对128-255范围内的人物,如果被看作是带符号的字符,将会被误解为负面,所以答案是“比以往任何时候都更多”。 –

回答

11

你还严格地说,必须使用unsigned char来避免现代版本C中的未定义行为吗?

是,从C11 draft standard7.4部分字符处理<文件ctype.h>段落说(重点矿山):

头声明有用若干功能进行分类和映射 个字符。 198)在所有情况下,参数是一个int值,其中应为 可表示为无符号字符或应等于宏EOF的值。如果 参数具有任何其他值,则行为未定义

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

相关问题