6

true の場合isdigitに返される理由を説明できる人はいますか? 2048私はctype.h図書館が初めてです。

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

2 に答える 2

24

許されるからです。C99 標準ではisdigitisalpha、 などについて次のように述べています。

この節の関数は、引数の値が関数の説明の値と一致する場合に限り、ゼロ以外 (true) を返します。c

なぜそれが実際に起こっているのかについては、私にはわかりません。推測では、すべての関数で共有されるルックアップ テーブルを使用しis*、特定のビット位置以外をすべてマスクしています。例えば:

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

// ... etc ...
int isalpha(char c) { return table[c] & 1024; }
int isdigit(char c) { return table[c] & 2048; }
// ... etc ...
于 2013-06-30T15:22:14.897 に答える
0

bool を指定数で表現する方法を定義する標準文書がなく、C 言語では非ゼロが真、ゼロが偽であるためです。したがって、実際の実装に依存します。

于 2013-08-29T01:36:51.030 に答える