On Tuesday 27 October 2009 02:54:50 Ricard Wanderlof wrote:
> On Mon, 26 Oct 2009, Rob Landley wrote:
> > ... Also, in my experience _Bool is about as real-world useful as the
> > bit field notation with the colons, and is really there to keep the
> > language pedants and the c++ guys happy without actually accomplishing
> > much.  I've never seen it actually produce better code.
>
> It can produce more readable, less error-prone C code though. We use
> hardware register definitions such as
>
> typedef struct {
>    unsigned int x : 8;
>    unsigned int y : 8;
>    unsigned int control_bit : 1;
>    unsigned int dummy1  : 15;
> } reg_foo;
>
> at great length for the C definitions for the registers in our chips, and
> it really does avoid nasty errors that crop up when using shifting and
> masking.

And introduces new nasty errors when "unspecified by the standard" details such 
as endianness change.  A quick google produced:

http://bytes.com/topic/c/answers/168169-whats-memory-layout-bit-field-struct-
little-endian-big-endian-platform.
http://groups.google.com/group/gnu.gcc.help/browse_thread/thread/747918655affa5c0

Even today, gcc refuses to take a position on that one, just "determined by 
ABI".

http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Structures-unions-enumerations-
and-bit_002dfields-implementation.html#Structures-unions-enumerations-and-
bit_002dfields-implementation

You're fine if all the world's a VAX, but uClibc, busybox, and the Linux kernel 
tend to like working on things like powerpc and mips.

Rob
-- 
Latency is more important than throughput. It's that simple. - Linus Torvalds
_______________________________________________
uClibc mailing list
uClibc@uclibc.org
http://lists.busybox.net/mailman/listinfo/uclibc

Reply via email to