We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Does #pragma pack(n) apply to all the structures in a source code or it has to be applied to each structure separately ? It's not clear from the manual. In one place it says: "You can use #pragma pack(n) to make sure that any structures with unaligned data are packed." In other: "This pragma aligns members of a structure to the minimum of n"
serialization is not a valid rationale for packing structures
thank you. i agree. And what is your opinion about the assumption that structures on both ends will have the same data alignment ?
That is not an assumption that you should ever even think about making!
Even if you do happen to have a case where it is known (not assumed) that the two ends do just happen to have the same data alignment, it is probably still better to design as if they didn't.
If you rely upon it now, it is bound to change - and it will certainly be much harder to redesign everything retrospectively than it would have been to just do it "right" in the first place.
And, again, remember that alignment is not the only issue...
the assumption that structures on both ends will have the same data alignment
That assumption should alsways be assumed to be wrong.
In a nutshell, C data structures are for internal use of the C program. They are generally unsuitable to define any external interface data, and any attempts to abuse them causes problems you just don't need.
There's a reason no self-respecting data interchange format is defined in terms of C structs: it simply wouldn't work. Those things are defined in terms of bits, octets and similarly universal items for a reason.