11

传统上,严格来说,将 a 传递signed charctype.h谓词是错误的,因为它们仅定义为 -1 到 255,因此 -128 到 -2 可能最终会读取数组边界之外的值。

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

4

1 回答 1

12

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

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

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

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

于 2013-07-31T16:39:08.103 回答