Кто-нибудь может объяснить, почему isdigit
вернуть 2048
если правда? Я новичок в ctype.h
библиотека.
#include <stdio.h>
#include <ctype.h>
int main() {
char c = '9';
printf ("%d", isdigit(c));
return 0;
}
Потому что это разрешено. Стандарт C99 говорит только об этом isdigit
, isalpha
, так далее:
Функции в этом подпункте вернуть ненулевое значение (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 ...
Поскольку не существует стандартного документа для определения способа представления bool указанным числом, а для языка C ненулевое значение равно true, а ноль — false. так что это зависит от фактической реализации.