From owner-freebsd-arch@FreeBSD.ORG Sun Dec 4 16:52:19 2011 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E81A91065676; Sun, 4 Dec 2011 16:52:18 +0000 (UTC) (envelope-from mdf356@gmail.com) Received: from mail-pz0-f54.google.com (mail-pz0-f54.google.com [209.85.210.54]) by mx1.freebsd.org (Postfix) with ESMTP id AAAB48FC14; Sun, 4 Dec 2011 16:52:18 +0000 (UTC) Received: by dakp5 with SMTP id p5so219162dak.13 for ; Sun, 04 Dec 2011 08:52:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:content-type :content-transfer-encoding; bh=gizAJgN8WyZ4GhY3bC2CxlsuhleFHt0/P13ea+5+RY8=; b=Gq834IQid1fYWk7/+yDAvM/g/VOwB83RZxq6u3ZnuAmQIdntsEIB6X9EpTTAx2k4VX PAw2b2GN4ge8TFYbCHgM+UUb5bFbMmwzPG3LLfjwGVrKm/2cWJAACpbStN3POQphYK/d /cMCgvMcYLwcjgvj0389TejaPF1jjg9FA0+nI= MIME-Version: 1.0 Received: by 10.68.22.69 with SMTP id b5mr15246855pbf.110.1323017538406; Sun, 04 Dec 2011 08:52:18 -0800 (PST) Sender: mdf356@gmail.com Received: by 10.68.56.97 with HTTP; Sun, 4 Dec 2011 08:52:18 -0800 (PST) In-Reply-To: <20111201014944.GA78010@zim.MIT.EDU> References: <20111130154604.B949@besplex.bde.org> <201111301032.04102.jhb@freebsd.org> <20111201014944.GA78010@zim.MIT.EDU> Date: Sun, 4 Dec 2011 08:52:18 -0800 X-Google-Sender-Auth: 5BLsyFHDWN30ST90W4kszPjFZ0U Message-ID: From: mdf@FreeBSD.org To: John Baldwin , freebsd-arch@freebsd.org, Zack Kirsch , mdf@freebsd.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Cc: Subject: Re: Use of bool / stdbool.h in kernel X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 04 Dec 2011 16:52:19 -0000 On Wed, Nov 30, 2011 at 5:49 PM, David Schultz wrote: > On Wed, Nov 30, 2011, John Baldwin wrote: >> On Wednesday, November 30, 2011 12:13:53 am Bruce Evans wrote: >> > On Tue, 29 Nov 2011 mdf@freebsd.org wrote: >> > >> > > At $WORK we have a hack in one of the *.mk files to allow including >> > > stdbool.h in the kernel and we use it extensively. =A0This is not >> > > allowed by style(9), as far as I can tell, because the file is in >> > > include/stdbool.h and those files are not allowed to be included in >> > > kernel sources. >> > >> > Including stdbool.h in the kernel is not a style bug, but unsupported. >> > >> > > What I want to check on is, would it be acceptable to move stdbool.h >> > > from include/stdbool.h to sys/sys/stdbool.h (i.e. like errno.h) and >> > > then include it in the kernel as ? =A0That is, is the >> > >> > Would be a larger style bug, especially if it were actually used. >> > Even its spellings of TRUE and FALSE are strange. =A0Even in userland >> > stdbool.h is considered so useful that it is never used in src/bin >> > and is only used a few times on other src/*bin. =A0src/bin never uses >> > TRUE of FALSE either. >> >> I suspect there is some bias here though due to the fact that there wasn= 't >> a standard bool type when most of this code was written. :) =A0I don't t= hink >> that means we have to forgo use of the new type now that it is in fact >> standardized in C99. =A0I would be happy to have 'bool' available and th= e >> lowercase 'true' and 'false' are fine with me. > > The lowercase 'true' and 'false' are intended to mimic C++, where > they are keywords. =A0Regardless of how you prefer to capitalize > them, using them instead of 0 and 1 makes the intent much clearer. > This is especially true in the kernel, where non-zero could mean > true, or it could be an error code. > > Unfortunately, the "new type" is mostly useless, aside from > improving readability. =A0Unlike modern languages, C doesn't > consider it a compile-time error to mix up bools and ints. Partly true. In addition to changing the semantics of the ++ and -- operators, _Bool is usually implemented as an 8-bit type and so pointers-to-bool and pointers-to-int are not compatible. Also, C (or at least gcc? I don't know my C99 standard the way I know C89) will apply default promotion and casting rules, so that e.g. an assignment like: int a; bool b; a =3D 2; b =3D a; printf("%d", b); will print 1. Thanks, matthew