在C编程语言书籍的第二版中,有人说像isdigit这样的函数可以返回任何非零值作为true.为什么像isdigit这样的函数返回一个随机的非零值作为true,而不是像1这样的标准值(就像逻辑表达式一样)?此外,在我的测试中,isdigit函数的结果始终为2048.这是完全随机的还是与某件事有关,还是这2048的值对每个人都一样?
我使用的编译器:GCC 12.1.0
在C编程语言书籍的第二版中,有人说像isdigit这样的函数可以返回任何非零值作为true.为什么像isdigit这样的函数返回一个随机的非零值作为true,而不是像1这样的标准值(就像逻辑表达式一样)?此外,在我的测试中,isdigit函数的结果始终为2048.这是完全随机的还是与某件事有关,还是这2048的值对每个人都一样?
我使用的编译器:GCC 12.1.0
isdigit
和相关 routine (如isalpha
)的常见实现是使用按字符值索引的数组,其中表的每个元素是属性的一组位标志.如果字符是数字,则设置一位;如果字符是字母,则设置一位;如果字符是空白字符,则设置一位,以此类推.
然后,<ctype.h>
个功能可以在很大程度上实现为table[x] & mask
,其中掩码为测试 Select 所需位.
如果字符不在测试集中,则结果为零,如果在测试集中,则结果为非零.因为非零值是被测试的标志,所以它不是一个,除非适用的标志碰巧使用了值为1的位零.例如,如果用于指示数字的位是位10,值为1024,则isdigit
将始终返回零或1024.
这足以满足字符分类功能的目的.添加一个只返回一个或零的需求将需要额外的步骤,因此这将是浪费,因此该需求没有添加到规范中.