传统上,严格来说,将signed char
传递给ctype.h
谓词是一个错误,因为它们只定义为-1到255,所以-128到-2可能会结束在数组边界外读取。
这是否已修复,或者您是否仍然严格地说必须使用unsigned char
来避免在现代版本的C中出现未定义的行为?
答案 0 :(得分:11)
你是否仍然严格地说必须使用unsigned char来避免在现代版本的C中出现未定义的行为?
是的,来自C11 draft standard部分7.4
字符处理&lt; ctype.h&gt; 段 1 说(强调我的< / em>的):
标头声明了几个对分类和映射有用的函数 在所有情况下,参数都是一个int,其值应为 可表示为无符号字符或等于宏EOF的值。如果 参数有任何其他值,行为未定义。
这也适用于draft C99 standard,您可以在同一部分找到它。