On 23/03/14 20:34, Darius Blaszyk wrote:
Jonas Maebe schreef op 23 mrt '14:

It's not an initialization, it's a struct with bitfields. FPC currently
does not support C-compatible bitfield packing. To get a record with
equal alignment and size you can declare it as "record data: cuint;
end;", but there is currently no way in FPC to access the bitfields in a
portable way across platforms.

One more question. Why is it that there is no portable way to access the
bitfields?

In part it's because no one has been able yet to come up with a natural way to specify them in Pascal. Note that the C declaration both has a base type (the "unsigned") and a bit width (the :x). Both pieces of information are required to determine the layout of the struct and to calculate its alignment. In part it's also because even with all that information, it's quite complex and sometimes ABI-dependant to generate a correct layout.

Is that because of endian issues, or is there more to it?
What about declaring the bitfields in a bitpacked record as "array of
boolean"?

That will not result in the proper alignment of the struct, and depending on how the struct is defined in C it may also not result in mapping the bits to the correct locations. "bitpacked" only matches the C behaviour if the struct has been declared with __attribute__((packed)).


Jonas
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to