Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #14349

Re: Struct casting

From jacob navia <jacob@spamsink.net>
Newsgroups comp.lang.c
Subject Re: Struct casting
Date 2011-12-06 08:29 +0100
Organization lccwin
Message-ID <jbkg83$ad8$1@speranza.aioe.org> (permalink)
References <jbjeed$c1v$1@speranza.aioe.org>

Show all headers | View raw


Le 05/12/11 22:52, Edward Rutherford a écrit :
> This was pulled up at a code review. Code was similar to this:
>
> struct foo {
>    int bar;
>    int baz;
> } f;
>
> int * i = (int *) f;
>
> The only way this could go wrong is if the struct contains padding before
> its first member, but I don't think this would ever happen in practice
> --- maybe on theoretical perverse implementations like the ones you guys
> like to play with :)
>
> Who is right here by the letter of the law?
>
> Cheers
> Edward

This is a mistake. Instead of writing

int *i = &f.bar; // 16 characters

you write

int * i = (int *) f; // 20 characters

AND (most important):

Now, the "bar" member MUST be the first member of the
structure! And, as Murphy's Law states, sombody will
add a member to the struct foo in the new version,
2 years from here.

WHO will remember that in another file there was an
implicit dependency as to "bar" being the first member?

This code is unmaintainable, it provokes a bug if
ANY modification is done to "bar" within the structure.

Suppose that "bar" member is eliminated. Instead of
provokinbg a compiler error and forcing you to change
the dependent code, the code will silently compile
and provoke a VERY hard debugging session.

I see no justification whatsoever for writing code
like that.

jacob

P.S. Anyway your code doesn't compile, as others have said.

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Struct casting Edward Rutherford <edward.p.rutherford79@REMOVETHIS.gmail.com> - 2011-12-05 21:52 +0000
  Re: Struct casting Harald van Dijk <truedfx@gmail.com> - 2011-12-05 13:58 -0800
  Re: Struct casting Tobias Blass <tobiasblass@gmx.net> - 2011-12-05 22:00 +0000
    Re: Struct casting Ian Collins <ian-news@hotmail.com> - 2011-12-06 11:10 +1300
  Re: Struct casting tom st denis <tom@iahu.ca> - 2011-12-05 14:06 -0800
    Re: Struct casting Ian Collins <ian-news@hotmail.com> - 2011-12-06 11:11 +1300
    Re: Struct casting James Kuyper <jameskuyper@verizon.net> - 2011-12-05 17:13 -0500
  Re: Struct casting Robert Wessel <robertwessel2@yahoo.com> - 2011-12-05 16:10 -0600
    Re: Struct casting Ian Collins <ian-news@hotmail.com> - 2011-12-06 11:13 +1300
    Re: Struct casting James Kuyper <jameskuyper@verizon.net> - 2011-12-05 17:15 -0500
  Re: Struct casting Keith Thompson <kst-u@mib.org> - 2011-12-05 14:16 -0800
    Re: Struct casting Lauri Alanko <la@iki.fi> - 2011-12-06 18:00 +0000
  Re: Struct casting blp@cs.stanford.edu (Ben Pfaff) - 2011-12-05 14:19 -0800
  Re: Struct casting jacob navia <jacob@spamsink.net> - 2011-12-06 08:29 +0100
    Re: Struct casting Malcolm McLean <malcolm.mclean5@btinternet.com> - 2011-12-06 00:15 -0800
      Re: Struct casting Ian Collins <ian-news@hotmail.com> - 2011-12-06 22:30 +1300
  Re: Struct casting jgk@panix.com (Joe keane) - 2011-12-08 21:08 +0000

csiph-web