"Nick Sabalausky" <a...@a.a> wrote in message news:hbonbp$to...@digitalmars.com... > "AJ" <a...@nospam.net> wrote in message news:hboaeu$5s...@digitalmars.com... >> >> "BCS" <n...@anon.com> wrote in message >> news:a6268ffbb0a8cc20817fe1f...@news.digitalmars.com... >>> Hello aJ, >>> >>>> I would think so. Anyway, what I find compelling about guaranteed >>>> widths is the potential to eliminate alignment and padding issues >>>> (that is, be able to control it with confidence across platforms as >>>> one already can on a single platform via compiler pragmas or cmdline >>>> switches). >>>> >>> >>> Ah! I thought you were taking issue with something. D has that and gets >>> most of the porting stuff to work. >>> >> >> It does? Get this to work on "all" platforms: >> >> struct ABC >> { >> byte a; >> int b; // may be improperly aligned on some platforms >> int64 c; // same issue >> }; >> >> > > // Guarantee packed on all platforms > align() struct ABC > { > byte a; > int b; // may be improperly aligned on some platforms > int64 c; // same issue > };
Well I can do the same thing with pragma or compiler switch in C++. It doesn't mean that thing will work if 32-bit ints have to be aligned on 32-bit boundaries. While nice to have one syntax to do that, it doesn't fix the "problem" (which I haven't expressed correctly probably). What good is a packed structure that has misaligned data members for the platform? > > // Guarantee 64-bit alignment on a, b, and c on all platforms > align(8) struct ABC > { > byte a; > int b; // may be improperly aligned on some platforms > int64 c; // same issue > }; > >