On Oct 16, 2014, at 4:50 AM, Graham Bloice <graham.bloice@xxxxxxxxxxxxx> wrote:
> Visual Studio (VS2013 at least) as 32 & 64 bit ARM compilers.
http://msdn.microsoft.com/en-us/library/0w6ke344.aspx
"Type char
Visual Studio 2013 Other Versions 1 out of 1 rated this helpful - Rate this topic
The char type is used to store the integer value of a member of the representable character set. That integer value is the ASCII code corresponding to the specified character.
Microsoft Specific
Character values of type unsigned char have a range from 0 to 0xFF hexadecimal. A signed char has range 0x80 to 0x7F. These ranges translate to 0 to 255 decimal, and –128 to +127 decimal, respectively. *The /J compiler option changes the default from signed to unsigned.*
END Microsoft Specific"
(emphasis mine, as that seems to implicitly indicate that an unqualified "char" is signed by default).
So, unless that page discusses *only* the x86-32/x86-64/Itanium-if-they-still-support-it compilers, it appears that char is signed by default on all platforms, presumably including ARM.
What we *could* do is, on some platform or platforms, do both default compiles and char-is-unsigned compiles, using /J for MSVC and -funsigned-char with GCC (and Clang?).
(I couldn't find any -W option for GCC that warns about code that would behave differently with char-is-signed and char-is-unsigned. There should be, but, then, there should also be an option to warn about *all* implicit shortenings - or, at least, all implicit shortenings that aren't known to be safe, such as converting "sizeof (int)" to a type shorter than size_t - even though there should be.)