In the book "Complete Reference of C" it is mentioned that char is by default unsigned.
But i am trying to verify this with GCC as well as visual studio. It is taking it as signed by default.
which one is correct
In the book "Complete Reference of C" it is mentioned that char is by default unsigned.
But i am trying to verify this with GCC as well as visual studio. It is taking it as signed by default.
which one is correct
The book is wrong. The standard does not specify if plain char
is signed or unsigned.
In fact, the standard defines three distinct types: char
, signed char
, and unsigned char
. If you #include <limits.h>
and then look at CHAR_MIN
, you can find out if plain char
is signed
or unsigned
(if CHAR_MIN
is less than 0 or equal to 0), but even then, the three types are distinct as far as the standard is concerned.
As Alok points out, the standard leaves that up to the implementation.
For gcc, the default is signed, but you can modify that with -funsigned-char
. You can also explicitly ask for signed characters with -fsigned-char
.
On MSVC, the default is signed but you can modify that with /J
.
The standard has this to say about the signed-ness of type char
:
The implementation shall define char to have the same range, representation, and behavior as either signed char or unsigned char.
and in a footnote:
CHAR_MIN
, defined in<limits.h>
, will have one of the values0
orSCHAR_MIN
, and this can be used to distinguish the two options. Irrespective of the choice made,char
is a separate type from the other two and is not compatible with either.