On Fri, Jun 10, 2005 at 11:49:45AM +0200, Poul-Henning Kamp wrote: > In message <20050610094615.GC79474_at_ip.net.ua>, Ruslan Ermilov writes: > > > >> struct t1 { int a; } x; > >> struct t2 { int a; } y = { 42 }; > >> x = y; > >> > >> The types `struct t1' and `struct t2' are not compatible and thus not > >> assignable. See 6.2.7 and 6.5.16.1. > >> > >If you're to byte-copy say t1 to t2, is it guaranteed to work? That is, > >do both types are guaranteed to have the same size and alignment of their > >structure members? I'm pretty sure this is guaranteed, as lot of code > >assumes this, for example, the sockaddr* structures. > > I do not belive that is guaranteed. (If it were the structs might as > well have been made assignable). You need to make sure that the two > definitions are covered by the exact same compilation conditions, > and you can't tell if a compiler has an option along the lines of > > -fstruct_is_magic=t2 > > Which does weird things you don't know about. > > The fact that it mostly works (and that we rely on this) is a > testament to the fact that compiler writers emply their destructive > creativity elsewhere. > Well, the above example isn't quite different from when compiling two modules that use the same structure type t1 but one of them is compiled with -fstruct_is_magic=t1. :-) Cheers, -- Ruslan Ermilov ru_at_FreeBSD.org FreeBSD committer
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:36 UTC