
On Thu, 2009-07-02 at 01:26 +0400, Bulat Ziganshin wrote:
Hello Duncan,
Tuesday, June 30, 2009, 4:18:32 AM, you wrote:
Actually passing structs and unions as arguments or function results is specified by the C ABI. See for example the IA32 ABI:
linked from the LSB: http://refspecs.linux-foundation.org/LSB_3.1.0/LSB-Core-IA32/LSB-Core-IA32/n...
sorry, it's "System V ABI, IA32 Supplement"
so situation is still the same - afaik, there is no common ABI for all C compilers on x86 platform that describes structures passing and alignment
You don't need it to be the same between Windows and Unix, it just has to be standard on each platform, which it is. There are really only two ABIs in common use on x86, the System V ABI and the MS one (which apart from the stdcall calling convention only differs in the bitfield layout iirc). But within each platform it most definitely is the same between C compilers[*], that's the whole point. These days there's even a standard C++ ABI. That took ages to standardise, the C one has been around for much much longer. Duncan [*] On Windows gcc can do both normal and MS layout of bitfields.