incorrect enum warning?

Mike Hunter mhunter at ack.Berkeley.EDU
Thu May 1 14:43:31 PDT 2003


On May 01, "Erik Trulsson" wrote:

> On Thu, May 01, 2003 at 11:03:40PM +0200, Dag-Erling Smorgrav wrote:
> > Stefan Farfeleder <stefan at fafoe.dyndns.org> writes:
> > > Because 0x80000000 > INT_MAX on 32-Bit architectures, 0x80000000 has
> > > type unsigned.  But enumeration constants always have type int, that's
> > > why you're getting this warning.
> > 
> > but 0x80000000 == INT_MIN on 32-bit two's complement systems...
> 
> No. 0x80000000 has type unsigned int (assuming 32-bit int) and is thus
> a large positive number.  INT_MIN has type signed int and is a negative
> number.  The fact that they happen to have the same representation does
> not mean they are the same thing.

#include <stdio.h>
#include <limits.h>

int main ()
{
        printf("%d\n", (0x80000000 == INT_MIN));
        return 0;
}

./a.out
1

Just pointing out that they do "==" each other, which is what was said.

Mike


More information about the freebsd-hackers mailing list