为什么isdigit()如果为真则返回2048?

时间:2013-06-30 15:20:40

标签: c++ c ctype

任何人都可以解释为什么isdigit返回2048如果是真的?我是ctype.h图书馆的新手。

#include <stdio.h>
#include <ctype.h>
int main() {
  char c = '9';
  printf ("%d", isdigit(c));
  return 0;
}

2 个答案:

答案 0 :(得分:22)

因为它被允许。 C99标准仅对isdigitisalpha等进行了说明:

  

此子条款中的函数返回非零(true)当且仅当值的值为   参数c符合函数描述中的参数。

至于为什么在实践中发生这种情况,我不确定。在猜测中,它使用与所有is*函数共享的查找表,并屏蔽除特定位位置之外的所有位置。 e.g:

static const int table[256] = { ... };

// ... etc ...
int isalpha(char c) { return table[c] & 1024; }
int isdigit(char c) { return table[c] & 2048; }
// ... etc ...

答案 1 :(得分:0)

因为没有标准文档来定义如何用指定的数字表示bool,而对于C语言,非零是真,零是假。所以它取决于实际的实施。