Help with cross-endian bitfields?

james woodyatt jhw at wetware.com
Mon May 8 17:03:57 EST 2000


Daniel Jacobowitz <drow at false.org> wrote:
>On Fri, May 05, 2000 at 03:27:21PM -0400, jlquinn at us.ibm.com wrote:
>>
[...]
>> Can someone tell me what's going on here?  Am I going to have to have
>> ifdef's on these structs, or resort to mask macros, or is there a
>> reasonable solution here.
>
>As Dan Malek said, there is no defined ordering.  The compiler is free
>to do whatever it wishes.  You can't assume that.  (I think.)
[...]

It's absolutely true.

Not only is there no defined ordering, the ANSI standard says that it
doesn't even need to use bitfield operations in the machine code.  It's
allowed to pad arbitrarily between the bitfields.  It's allowed to
completely ignore the bitfield widths and treat the members like integers.
It's even allowed to order the very bits themselves in weird ways, if it
thinks the processor will like it better that way.

Bitfields are just not even remotely portable.

C structures should not be used to represent portable serializations of
external data.  Period.  Yes, they're convenient-- but your compiler and my
compiler don't have to agree on practically anything about them.


--
j h woodyatt <jhw at wetware.com>
http://www.wetware.com/jhw
"Yeah, Mercury's going into retrograde, but
at least we're not the Kennedys."  --sean poreda


** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/





More information about the Linuxppc-dev mailing list