On May 22, 2016, at 5:40 AM, Mouse <mouse at
Rodents-Montreal.ORG> wrote:
First off, the C standard mandates that the order of
fields in a
struct cannot be reordered,
Yes. (I think this is a Bad Thing, but I can see why
they did it.)
Given that C is a systems implementation language, how would you
define HW related data structures where the order of the fields is
critical (ie HW defines them).
I can see three answers.
1) Don't use structs for that. Look at NetBSD's bus-space abstraction
for one possible way.
I already have to do that for bit fields (ie do mask and shift). The code
would look *much* cleaner/clearer if I could in fact use bit-fields.
Anything that is implementation defined results in them not being able
to be used. For example, I have a peripheral that has structures that
define how to communicate to the peripheral. If structs are ?implemenation?
defined, then I can?t use the same structure across the interface because
I can?t guarantee that one side will interpret the structure the same as
the other.
This is *exactly* the issue with bit fields. I want to use them (because it
makes sense) as part of an interface but I can?t because I can?t know
what the compilers will do on each side.
2) Make any reordering implementation-defined, so that code for
specific implementations can know how the implementation does it.
3) Make reordering optional. Which way the default should go is
arguable; since my guess is that most structs are not
hardware-interface structs, the default should be reordering, with
some keyword specifying no reordering.
?and that sort of thing will cause all sorts of havoc in terms of breaking
software that currently works. You?d have to go back and find/change
all of the places where reordering isn?t desired. *If* it were to happen
I will bet dollars to donuts that the default would be no reordering and
there would be an attribute to allow for it.
?and what exactly is reordering supposed to buy you?
I would argue that for what you?re talking about is not ?C? but some
language that may share some syntactic/semantic similarities with
?C? but is a clearly different language.
TTFN - Guy