GCC делает. Но только при компиляции для платформ, где беззнаковый символ является соглашением, включая ARM linux [*]. Когда GCC компилируется для x86, по умолчанию используется char для подписи.
[*] Или, по крайней мере, это было в прошлом. Насколько я знаю, с тех пор linux переключился на другой ABI по умолчанию в ARM.
Обновление '2013: ARM-компиляторы (gcc, clang) для Android NDK по умолчанию unsigned char
. Компиляторы x86 и MIPS по умолчанию signed char
.