RE: unsigned

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



 Trevis Rothwell wrote:
> Given the following program:
> 
>   int main()
>   {
>     unsigned int squiggy = 2147483648;
>   }
> 
> Compliing on GCC 3.2.3, I get the following warning:
> 
>   $ gcc foo.c
>   foo.c: In function `main':
>   foo.c:3: warning: decimal constant is so large that it is unsigned
> 
> To the best of my knowledge, 2147483648 should fit with ample room to
> spare in an unsigned (4-byte) integer.

Ample room to spare? How so? It requires all 32 bits.  There is ample
/range/ to spare, maybe. :)

> What's going on?

The warning has nothing to do with the unsigned declaration. The
compiler simply isn't smart enough to realize that you are assigning the
constant to a type which can hold its value. The diagnostic is just
about the constant, independently of how it is used.

In C90 (let's ignore C99 and long long), an integer constant which does
not have any suffix (U or L) is given a type according these rules:

- if its value fits into int, then it is int
- otherwise if its value fits into unsigned int, then that's the type,
- otherwise long,
- then unsigned long.

You have written a constant which doesn't fit into int and must be made
into unsigned int, and the compiler is warning about that, that is all.
Try 2147483648U.

In C99 the rules have changed. A decimal integer constant is assigned
the first of these types that can represent its value:

- int
- long
- long long

The unsigned types are not considered. So that explains the reasoning
behind the new warning found in gcc 4.1.1.

In C99, only octal and hexadecimal constants (without the U suffix) have
the behavior that their type can be chosen from among the signed and
unsigned types. An unsuffixed hex or octal constant is assigned the
first one from this list:

- int
- unsigned int
- long
- unsigned long
- long long
- unsigned long long


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux