@boxfish
Waidaminnit: ASCII is ASCII is ASCII.
I'm sure what boxfish meant was the the encoding of characters may be different on different platforms. Some might use ASCII, some might use EBCDIC, some might use other encoding systems. That's one reason why character constants are better than bare numbers.
Another reason is that bare numbers (so called magic numbers) should be avoided because they poorly document/explain what the code is trying to do.
Of course, this objection could be met by a collection of macro definitions such as this [tongue firmly in cheek]:
#define SMALL_A 65
However, if you're totally paranoid about portable code I don't think you can even take for granted that the range of character codes between 'a' and 'z' are exclusively lower case letters. Perhaps there are holes, perhaps they are out of order.
By far the best way to go is to use the functions in ctype.h (suggested by boxfish).