为什么像 isdigit() 这样的函数会返回一个随机的非零值?

Bro*_*m35 3 c gcc

在《C 编程语言》一书中的第二版中,据说像 isdigit 这样的函数可以返回任何非零值作为 true。为什么像 isdigit 这样的函数返回 true 的随机非零值,而不是像 1 这样的标准化值(就像逻辑表达式一样)?另外,在我的测试中,isdigit 函数的结果始终为 true 2048。这是完全随机的还是与某些因素相关,或者这个 2048 值对每个人来说都是相同的?

我使用的编译器:GCC 12.1.0

Eri*_*hil 6

isdigit相关例程的常见实现isalpha是使用按字符值索引的数组,其中表的每个元素都是属性的一组位标志。如果字符是数字,则设置一位;如果字符是字母,则设置一位;如果字符是空白字符,则设置一位,依此类推。

然后,这些<ctype.h>功能可以主要实现为table[x] & mask,其中掩码选择测试所需的位。

如果字符不在测试集中,则结果为零;如果在测试集中,则结果非零。因为非零值是测试的标志,所以它不是 1,除非适用的标志碰巧使用了位 0,值为 1。例如,如果用于指示数字的位是位十,值为 1024,则将isdigit始终返回零或 1024。

这足以满足字符分类功能的目的。添加仅返回 1 或 0 的要求将需要额外的步骤,因此会造成浪费,因此该要求未添加到规范中。