Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | Phil Carmody <thefatphil_demunged@yahoo.co.uk> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: offsetOf |
| Date | 2011-07-24 14:18 +0300 |
| Organization | A noiseless patient Spider |
| Message-ID | <87y5zoork3.fsf@bazspaz.fatphil.org> (permalink) |
| References | <pan.2011.07.23.20.54.51@mailinator.com> <0.500382f6e840bc7bfed7.20110723230357BST.871uxgu01e.fsf@bsb.me.uk> |
Ben Bacarisse <ben.usenet@bsb.me.uk> writes:
> Jack Boot <jackboot@mailinator.com> writes:
>
> > This came up in a code review recently, I've never heard of it before,
> > opinions welcome.
> >
> > There is a struct that looks a bit like this
> >
> > struct foo {
> > int a[10];
> > long b;
> > ...
> > };
> >
> > Now I have a function that starts thusly:
> >
> > void
> > bar ( struct foo * f )
> > {
> > int * ip = (int *) foo;
> > ...
> > }
> >
> > The reviewer recommended, that for maximal portability I should replace
> > this by:
> >
> > int * ip = ( (int *) ( ( (unsigned char *) foo ) + offsetOf(struct foo,
> > a) ) );
> >
> > I've never seen this construction before, also I think type punning is
> > inherently non-portable so I'm not sure how much this buys you.
>
> Nothing but obfuscation.
That's kind to it.
> offsetOf(struct foo, a) is 0 (it can't be
> otherwise) so this just converts to a char * first. This won't hurt but
> it won't help either. This:
>
> int *ip = f->a;
I have this fetish for wanting addresses to explicitly be addresses
(the result of applying the 'address of' operator), so my default
would be that which explicitly says 'the address of the first element':
int *ip = &f->a[0];
I'm consistent with this, I also like to pass functions around with
an explicit '&' before their name.
The weird thing is that I'm usually one who favours brevity, but for
addresses, I like a clear flag that reminds me what I'm dealing with.
> is, to my mind, the clearest way to write it. I can't see why it would
> be done with any casts at all.
100% agree. Casts are usually a warning sign.
Phil
--
"At least you know where you are with Microsoft."
"True. I just wish I'd brought a paddle." -- Matthew Vernon
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
offsetOf Jack Boot <jackboot@mailinator.com> - 2011-07-23 20:54 +0000
Re: offsetOf Ian Collins <ian-news@hotmail.com> - 2011-07-24 09:05 +1200
Re: offsetOf Ben Bacarisse <ben.usenet@bsb.me.uk> - 2011-07-23 23:03 +0100
Re: offsetOf Jack Boot <jackboot@mailinator.com> - 2011-07-24 10:30 +0000
Re: offsetOf Ian Collins <ian-news@hotmail.com> - 2011-07-24 22:41 +1200
Re: offsetOf James Kuyper <jameskuyper@verizon.net> - 2011-07-24 08:36 -0400
Re: offsetOf jt@toerring.de (Jens Thoms Toerring) - 2011-07-24 14:50 +0000
Re: offsetOf Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2011-07-24 10:28 -0600
Re: offsetOf Nobody <nobody@nowhere.com> - 2011-07-24 17:30 +0100
Re: offsetOf gordonb.gkpc8@burditt.org (Gordon Burditt) - 2011-07-27 08:43 -0500
Re: offsetOf Phil Carmody <thefatphil_demunged@yahoo.co.uk> - 2011-07-24 14:18 +0300
Re: offsetOf Ben Bacarisse <ben.usenet@bsb.me.uk> - 2011-07-24 12:50 +0100
Re: offsetOf Phil Carmody <thefatphil_demunged@yahoo.co.uk> - 2011-07-24 18:25 +0300
Re: offsetOf Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-07-23 20:12 -0400
Re: offsetOf "J. J. Farrell" <jjf@bcs.org.uk> - 2011-07-24 01:57 +0100
csiph-web