towards a faster isdigit()

Paul Eggert eggert at
Thu May 9 10:25:29 AEST 1991

ark at (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