Just look at all the <ctype.h>/<cctype> functions such as tolower, isspace, etc. They all take an int as argument.
The type is less important in C because there is no function overloading and the promotion rules will automatically convert chars to ints when passing them to for example printf.
There may, back in the day, have been hardware reasons too. Some of the older cpus worked better with fixed sized chunks, the machine's 'word' size. This is a dim memory, not sure to be honest, but it was similar to how structs can be realigned by some compilers for performance reasons.
#include <cstdio>
int main() {
char c = '\0';
printf(" sizeof c = %2zu\t sizeof(char) = %2zu\n",
sizeof c, sizeof('A'));
}
sizeof c = 1 sizeof(char) = 1
But compiled as C code:
sizeof c = 1 sizeof(char) = 4
But, as has been pointed out above, in C a char literal (eg 'A') has a type of int, not char. That's why in C sizeof('A') is 4 and not 1. The output is misleading as it's not showing sizeof(char), but sizeof (char_literal). In C++ they are the same. In C they are not.