Ответ выше также изменит вещи, которые не являются буквами. Возможно ...
#define LOWERTOUPPER(x) (('a' <= (x) && (x) <= 'z') ? ((x - 'a') + 'A') : (x))
хотя это вызвало бы проблемы, если бы оно вызывалось как
LOWERTOUPPER(*p++);
, а также не подходит для набора символов EBCDIC. Все это доказывает, что подобные вещи - плохая идея.