There isn't really any difference when it comes to C and C++. The languages state that the default of any integer type (char, short (int), int, long (int) and long long (int) in C99) is signed. With normal integers, determining whether to use signed vs unsigned is as simple as asking yourself the following question: do you wish to allow for negative values? If you want to allow yourself to use negative values (or your users if you are creating an API or your fellow coders if you are creating an open source application for others to freely modify), choose signed. Note that with the char data type, signed vs unsigned doesn't matter. 0 to 127 is the same. -128 to -1 (signed) is the same as 128 to 255 (unsigned), even in binary.
That's probably why there is an option in some versions of Visual Studio to allow for changing the default to unsigned char. After all, working with negative values seems somewhat unnatural.
