tags:

views:

99

answers:

4

hi,

Is there any C compiler which takes the default type of char as unsigned unless explicitly mentioned by the user in the file or project settings?

/Kanu_

+1  A: 

The standard does not specify if plain char is signed or unsigned.

http://stackoverflow.com/questions/2054939/char-is-signed-or-unsigned-by-default/2054941#2054941

karlphillip
+2  A: 

There is usually an option to set it as default, but no compiler of my knowledge does that.

jv42
+4  A: 

GCC does. But only when compiling for platforms where an unsigned char is the convention, including ARM linux[*]. When GCC compiles for x86, the default is for char to be signed.

[*] Or at least it has been in the past. For all I know linux has switched to a different default ABI on ARM since.

Steve Jessop
+1  A: 

The standard requires that the integer value of all characters required by the standard (A-Z, a-z, 0-9, basic punctuation, etc.) be positive, so any system using an encoding where these characters' values are outside the range of signed char must have plain char be unsigned. I believe this means all EBCDIC systems must have a plain char that's unsigned, but I may be mistaken.

R..
If `CHAR_BIT` > 8 the range of values for `char` is greater than -128..127 or 0..255. So, on an EBCDIC system with CHAR_BIT == 9, a plain `char` can be signed.
pmg