towards a faster isdigit()
Paul Eggert
eggert at twinsun.com
Thu May 9 10:25:29 AEST 1991
ark at alice.att.com (Andrew Koenig) writes:
>> #define isdigit(c) ((unsigned)((c)-'0') < 10)
>... can you find a character set that meets the ANSI C constraints (in
>particular, the one that says that all digits are contiguous in the
>character set) for which this macro will not work?
Yes: any host where char is the same as int, and where '0' != 0.
The subtraction might overflow.
The following slightly revised isdigit() works around this problem
because unsigned arithmetic cannot overflow:
#define isdigit(c) ((unsigned)(c) - '0' < 10)
but frankly I worry that some old buggy compilers will generate the
wrong code for this ``more portable'' version.
More information about the Comp.lang.c
mailing list