int always 32 bits on all platforms?

Chris Nicholson-Sauls ibisbasenji at gmail.com
Wed Oct 21 23:32:20 PDT 2009


AJ wrote:
> "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?
> 

struct ABC {
	version (RequireAlign4) align(4)
	byte a;
	int b;
	int64 c;
}




More information about the Digitalmars-d mailing list