From: kagel AT quasar DOT bloomberg DOT com Date: Tue, 9 Jul 1996 10:02:22 -0400 Message-Id: <9607091402.AA11095@quasar.bloomberg.com > To: locke AT mcs DOT net Cc: djgpp AT delorie DOT com In-Reply-To: <31e1ed3d.40380323@news.mcs.net> (locke@mcs.net) Subject: Re: C/C++ Packing (was: Re: [_dos_]find{first|next} problem!) Reply-To: kagel AT dg1 DOT bloomberg DOT com From: locke AT mcs DOT net (Peter Johnson) Date: Tue, 09 Jul 1996 05:29:13 GMT On Sun, 07 Jul 1996 19:27:32 GMT, alaric AT abwillms DOT demon DOT co DOT uk (Alaric B. Williams) wrote: > >It seems to be a structure packing problem... the ff.c in djtst claims >that the offset of ff_name is 30; but the SAME test in my code returns >32. Why is the packing changing? I compile both sources with the same >command line! > Peter Johnson continues: Output of compiled ff.c: sizeof(ff) = 290 ff.ff_attrib = 21 ff.ff_ftime = 22 ff.ff_fdate = 24 ff.ff_fsize = 26 ff.ff_name = 30 (null): error Output of compiled ff.cc (identical to ff.c): sizeof(ff) = 292 ff.ff_attrib = 21 ff.ff_ftime = 22 ff.ff_fdate = 24 ff.ff_fsize = 28 ff.ff_name = 32 (null): error For some reason, ff_fdate is not packed as a SHORT!! instead it is packed on a 4-byte margin...... HMMM! DJ, Charles - Any ideas why packing would differ C/C++?? This is a known bug in GCC handling structure packing in C++. I believe that DJ and others have reported it to the FSF and it should be fixed in later versions. For now you can add #pragma pack or the __attribute__((packed)) storage attribute to your C++ structures (see the DJGPP docs, GNU C/C++ Manual, or prior threads for the exact usage as I have not had occasion to use these). Also the faq (section 22.9) points to: http://www.delorie.com/gnu/docs/gcc/gcc_83.html#SEC86 -- Art S. Kagel, kagel AT quasar DOT bloomberg DOT com A proverb is no proverb to you 'till life has illustrated it. -- John Keats