Date: Thu, 1 May 2003 17:20:22 +0200 From: Stefan Farfeleder <stefan@fafoe.dyndns.org> To: "Jacques A. Vidrine" <nectar@FreeBSD.org> Cc: Dag-Erling Smorgrav <des@ofug.org> Subject: Re: incorrect enum warning? Message-ID: <20030501152022.GC568@wombat.fafoe> In-Reply-To: <20030501150713.GA34992@madman.celabo.org> References: <xzp7k9a67pf.fsf@flood.ping.uio.no> <20030501150713.GA34992@madman.celabo.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, May 01, 2003 at 10:07:13AM -0500, Jacques A. Vidrine wrote: > On Thu, May 01, 2003 at 04:51:40PM +0200, Dag-Erling Smorgrav wrote: > > Why does the following code in OpenPAM headers: > > > > enum { > > PAM_SILENT = 0x80000000, <...> > > }; > > > > cause the following warning when compiled with CSTD=c99: > > > > /usr/src/contrib/openpam/include/security/pam_constants.h:100: warning: ISO C restricts enumerator values to range of `int' > > > > when 0x80000000 is clearly within the range of 'int' on all platforms > > we support? > > Guessing: > C does not specify one's complement or two's complement representation > of integers. On a one's complement 32-bit platform, 0x80000000 is -0 > (negative zero), which cannot be an `int'. 6.4.4.1 Integer constants <...> The type of an integer constant is the first of the corresponding list in which its value can be represented. int unsigned int long int unsigned long int long long int unsigned long long int [This is for hexadecimal constants without suffix.] 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. Regards, Stefan Farfeleder
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030501152022.GC568>