From owner-freebsd-hackers@FreeBSD.ORG Thu May 1 08:20:27 2003 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id C556D37B401; Thu, 1 May 2003 08:20:27 -0700 (PDT) Received: from fafoe.dyndns.org (chello212186121237.14.vie.surfer.at [212.186.121.237]) by mx1.FreeBSD.org (Postfix) with ESMTP id F20A843F85; Thu, 1 May 2003 08:20:26 -0700 (PDT) (envelope-from stefan@fafoe.dyndns.org) Received: from wombat.fafoe (wombat.fafoe [192.168.2.102]) by fafoe.dyndns.org (Postfix) with ESMTP id 31A603FC4; Thu, 1 May 2003 17:20:25 +0200 (CEST) Received: by wombat.fafoe (Postfix, from userid 1001) id 912BF5E; Thu, 1 May 2003 17:20:22 +0200 (CEST) Date: Thu, 1 May 2003 17:20:22 +0200 From: Stefan Farfeleder To: "Jacques A. Vidrine" Message-ID: <20030501152022.GC568@wombat.fafoe> Mail-Followup-To: "Jacques A. Vidrine" , Dag-Erling Smorgrav , hackers@freebsd.org References: <20030501150713.GA34992@madman.celabo.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030501150713.GA34992@madman.celabo.org> User-Agent: Mutt/1.5.4i cc: hackers@freebsd.org cc: Dag-Erling Smorgrav Subject: Re: incorrect enum warning? X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 May 2003 15:20:28 -0000 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