How do you know if a platform is signed or unsigned char by default? ~/git/gcc% git grep '#define.*DEFAULT_SIGNED_CHAR.*0' | cut -f 3 -d / | xargs echo | fmt -78 aarch64 arc arm arm epiphany h8300 lm32 mcore mips mn10300 moxie msp430 rl78 rs6000 rx s390 spu stormy16 visium xtensa ~/git/gcc% git grep '#define.*DEFAULT_SIGNED_CHAR.*1' | cut -f 3 -d / | xargs echo | fmt -78 alpha avr bfin c6x cr16 cris fr30 frv ft32 h8300 i386 ia64 iq2000 m32c m32r m68k mep microblaze mips mmix nds32 nios2 nvptx pa pdp11 rs6000 sh sparc tilegx tilepro v850 vax h8300, mips, and rs6000 are in both lists! For h8300: ~/git/gcc% git grep '#define.*DEFAULT_SIGNED_CHAR' gcc/config/h8300 gcc/config/h8300/h8300.h:#define DEFAULT_SIGNED_CHAR 0 gcc/config/h8300/linux.h:#define DEFAULT_SIGNED_CHAR 1 So normally unsigned char (the comment above suggests sign-extension is expensive), but signed char on Linux, presumably for bug-compatibility with x86. For mips: ~/git/gcc% git grep '#define.*DEFAULT_SIGNED_CHAR' gcc/config/mips gcc/config/mips/mips.h:#define DEFAULT_SIGNED_CHAR 1 gcc/config/mips/sde.h:#define DEFAULT_SIGNED_CHAR 0 Here you have to know that the 'sde' is the Software Development Environment, an SDK for cross-development; why it's other-signedness from regular mips, I couldn't say. For rs6000, which is how gcc spells PowerPC: % git grep '#define.*DEFAULT_SIGNED_CHAR' gcc/config/rs6000 gcc/config/rs6000/darwin.h:#define DEFAULT_SIGNED_CHAR (1) gcc/config/rs6000/rs6000.h:#define DEFAULT_SIGNED_CHAR 0 Now there wasn't ever a gcc port to MacOS classic, as far as I know, so the question is whether Darwin was going for source compatibility with MacOS Classic, or with OpenStep. If the latter, all of pa, x86, m68k, and sparc are signed-char, which would be consistent with the architectures for OpenStep. If we wanted to know if the former was also true we could probably figure it out from something that did have a MacOS Classic port, say, Perl. In terms of current and historical things that RHL/Fedora have been ported to: Signed Unsigned alpha aarch64 i686 arm ia64 ppc m68k ppc64 mips ppc64le sparc riscv x86_64 s390 s390x