An interesting side note: Microsoft claims that their implementations of these functions are blindingly fast (they said something along the lines that calling these is faster than "if (((0xXX <= ch) && (ch <= 0xYY)) || ((0xAA <= ch) && (ch <=0xBB)))"). I wonder if this means they are using a lookup table in their implementation? Not planning to implement any such thing myself, of course, but I did find it to be an intrigueing statement.
A lookup table is likely to be slower - after all the required entry is unlikely to be in the data cache (except when running a benchmark).
Clearly the comparison if ( (unsigned)(ch - 0xXX) < 0xYY - 0xXX ... is faster than the one quoted - but the compiler is likely to generate that anyway.
David