Помимо использования int
вместо unsigned char
для типа (и, таким образом, тратя 768 байт), я считаю это очень хорошей идеей / реализацией. Имейте в виду, что это зависит от функций C99, поэтому он не будет работать со старыми компиляторами C89 / C90.
С другой стороны, простые условные выражения должны иметь одинаковую скорость и намного меньший размер кода, но они могут эффективно представлять только определенные естественные классы.
#define is_ascii_letter(x) (((unsigned)(x)|32)-97<26)
#define is_digit(x) ((unsigned)(x)-'0'<10)
и т.д.