Date: Tue, 27 Oct 1998 00:04:27 +0100 From: Eivind Eklund <eivind@yes.no> To: Garrett Wollman <wollman@khavrinen.lcs.mit.edu> Cc: freebsd-net@FreeBSD.ORG Subject: Re: questions of taste.. mbuf header change Message-ID: <19981027000427.59289@follo.net> In-Reply-To: <199810261712.MAA19008@khavrinen.lcs.mit.edu>; from Garrett Wollman on Mon, Oct 26, 1998 at 12:12:55PM -0500 References: <199810252219.RAA10102@whizzo.transsys.com> <199810261712.MAA19008@khavrinen.lcs.mit.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Oct 26, 1998 at 12:12:55PM -0500, Garrett Wollman wrote: > (You have stumbled into one of the most annoying misfeatures of the C > language: there is no way to actually USE an incomplete structure that > is even marginally useful; in order to have opaque objects it is > necessary to insert a level of indirection which is less than > desirable in a low-level context such as this.) Well, there is one nasty trick: Create a non-opaque definition of a variable as an anonymous structure, then fill in a char[] with the size of the structure, minus the size of the first element (which you need to get the correct alignement). Like this: struct something; static struct { struct something *something; ... more struct defintion here ... } anonymous_stuff; struct stuff { struct something *do_not_use_this_under_any_circumstance; char filler[sizeof(anonymous_stuff) - sizeof(anonymous_stuff.something)]; }; This is not allowed to fail in standard C. However, it may well produce a bunch of warnings, and I don't particularly like it. It will make any cross-file checker (like a good lint) SCREAM (at least until you set up the necessary filters for those warning messages). Eivind. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19981027000427.59289>