On Tue, Jan 27, 2009 at 11:59:15PM +0100, Christoph Mallon wrote: > Luigi Rizzo schrieb: > >In a recent commit tp sbin/ipfw, in an attempt to avoid > >a large set of header deependencies, i put a 'forward typedef' > >declaration in a common header, duplicating something that is in a > >system header: > > > >ipfw2.h: typedef struct _ipfw_insn ipfw_insn; > > > >netiinet/ip_fw2.h > > typedef struct _ipfw_insn { /* template for instructions */ > > ... > > } ipfw_insn; > > This just begs to break, if somebody decides to change the name of the > underlying type of the typedef. Fortunately this is almost impossible -- the system header is basically frozend and if I could change it I would remove the typedef in the first place. I am more worried of compatibility with different compiler. A workaround that seems to work is putting forward declarations just for "struct _ipfw_insn" and use it (instead of the typedef name) in the place that does not include netiinet/ip_fw2.h Would this be better/more compliant with standards -- i.e., is the following code correct ? gcc seems to have no objections. struct foo; int a(struct foo *); typedef struct foo bar; int a(bar *x) { ... } cheers luigiReceived on Tue Jan 27 2009 - 22:15:32 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:41 UTC