Use of bool / stdbool.h in kernel
David Schultz
das at FreeBSD.ORG
Thu Dec 1 02:08:46 UTC 2011
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 at 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. This 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 <sys/stdbool.h>? That is, is the
> >
> > Would be a larger style bug, especially if it were actually used.
> > Even its spellings of TRUE and FALSE are strange. Even 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. src/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. :) I don't think
> that means we have to forgo use of the new type now that it is in fact
> standardized in C99. I would be happy to have 'bool' available and the
> lowercase 'true' and 'false' are fine with me.
The lowercase 'true' and 'false' are intended to mimic C++, where
they are keywords. Regardless 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. Unlike modern languages, C doesn't
consider it a compile-time error to mix up bools and ints.
More information about the freebsd-arch
mailing list