int always 32 bits on all platforms?

AJ aj at nospam.net
Wed Oct 21 22:35:12 PDT 2009


"Nick Sabalausky" <a at a.a> wrote in message 
news:hbonbp$to1$1 at digitalmars.com...
> "AJ" <aj at nospam.net> wrote in message news:hboaeu$5sk$1 at digitalmars.com...
>>
>> "BCS" <none at anon.com> wrote in message 
>> news:a6268ffbb0a8cc20817fe1f1c2 at 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
> };
>
> 





More information about the Digitalmars-d mailing list