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


Groups > comp.lang.c > #65150

Re: Struct and Union

From James Kuyper <jameskuyper@verizon.net>
Newsgroups comp.lang.c
Subject Re: Struct and Union
Date 2015-07-10 13:47 -0400
Organization Self
Message-ID <55A0052E.5030904@verizon.net> (permalink)
References <a653fc98-5fae-48ff-ba1c-d7b53adee150@googlegroups.com> <405a385f-f728-45c0-adfa-c6e1a1662938@googlegroups.com> <87oajkvukx.fsf@bsb.me.uk> <44898eb2-560d-444f-bea4-1ddf7bb69f36@googlegroups.com>

Show all headers | View raw


On 07/10/2015 01:18 PM, David Kleinecke wrote:
> On Friday, July 10, 2015 at 9:36:07 AM UTC-7, Ben Bacarisse wrote:
>> "Rick C. Hodgin" <rick.c.hodgin@gmail.com> writes:
>>
>>> On Friday, July 10, 2015 at 3:49:56 AM UTC-4, janus wrote:
>>>> Hello All,
>>>>
>>>> I have 2 options but which one is idiomatic C?
>>>>
>>>> 1)
>>>> typedef struct CStatement
>>>> {
>>>>     int stype;
>>>>
>>>>     union Statement
>>>>     {
>>>>         CPrintStatement* printstatement;
>>>>         CInputStatement* inputstatement;
>>>>         CAssignStatement* assignstatement;
>>>>         CGotoStatement* gotostatement;
>>>>         CIfThenStatement* ifthenstatement;
>>>>         void* sstatement;
>>>>
>>>>     } statement;
>>>> }CStatement;
>>>
> 
> The real reason for using a union is if the members are of different
> sized types and you want to insure that all of them fit.

That's one reason to use unions. It has the disadvantage that it takes
up the same amount of space as the largest member type, which can be
wasteful if most uses of the union use a type that's much smaller than
the largest.
However, type punning is also a common use of unions, and that's
precisely what's going on here. The actual memory being pointed at by
those pointers might (or might not) be dynamically allocated.

> ... All pointers are the same size ...

That's not true in general. It might be true if all of those typedefs
are for struct types, or for [[un]signed] char*. Otherwise, you can't be
sure whether they all have the same size except by testing. The results
of the test using one compiler might be different than when using a
different compiler - and that's the case even if both compilers are
targeting the same platform.

> ... so a union is inappropriate here.

For type punning, having all of the members of a union being at least
approximately the same size makes the union more space efficient.

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


Thread

Struct and Union janus <emekamicro@gmail.com> - 2015-07-10 00:49 -0700
  Re: Struct and Union Richard Heathfield <rjh@cpax.org.uk> - 2015-07-10 09:04 +0100
    Re: Struct and Union janus <emekamicro@gmail.com> - 2015-07-10 01:40 -0700
      Re: Struct and Union Richard Heathfield <rjh@cpax.org.uk> - 2015-07-10 09:50 +0100
        Re: Struct and Union Richard Heathfield <rjh@cpax.org.uk> - 2015-07-10 13:44 +0100
    Re: Struct and Union "Bill Davy" <Bill@SynectixLtd.com> - 2015-07-10 12:37 +0100
      Re: Struct and Union Keith Thompson <kst-u@mib.org> - 2015-07-10 08:24 -0700
        Re: Struct and Union Keith Thompson <kst-u@mib.org> - 2015-07-12 12:53 -0700
  Re: Struct and Union Ian Collins <ian-news@hotmail.com> - 2015-07-10 21:32 +1200
  Re: Struct and Union "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2015-07-10 05:12 -0700
    Re: Struct and Union Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-07-10 17:35 +0100
      Re: Struct and Union David Kleinecke <dkleinecke@gmail.com> - 2015-07-10 10:18 -0700
        Re: Struct and Union "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2015-07-10 10:23 -0700
        Re: Struct and Union James Kuyper <jameskuyper@verizon.net> - 2015-07-10 13:47 -0400
        Re: Struct and Union Keith Thompson <kst-u@mib.org> - 2015-07-10 12:38 -0700
      Re: Struct and Union "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2015-07-10 10:27 -0700
  Re: Struct and Union Bartc <bc@freeuk.com> - 2015-07-10 13:55 +0100
  Re: Struct and Union Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-07-10 21:48 +0100
    Re: Struct and Union "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2015-07-10 13:51 -0700
      Re: Struct and Union Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-07-10 23:45 +0100
        Re: Struct and Union "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2015-07-10 17:43 -0700
          Re: Struct and Union Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-07-11 13:04 +0100
            Re: Struct and Union "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2015-07-11 05:15 -0700
              Re: Struct and Union Bartc <bc@freeuk.com> - 2015-07-11 14:01 +0100
                Re: Struct and Union "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2015-07-11 06:05 -0700
                Re: Struct and Union "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2015-07-11 06:13 -0700
            Re: Struct and Union Keith Thompson <kst-u@mib.org> - 2015-07-11 13:51 -0700
              Re: Struct and Union Martin Shobe <martin.shobe@yahoo.com> - 2015-07-11 16:51 -0500
              Re: Struct and Union Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-07-11 23:13 +0100
                Re: Struct and Union Keith Thompson <kst-u@mib.org> - 2015-07-11 17:39 -0700
              Re: Struct and Union Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-07-11 16:56 -0700
  Re: Struct and Union Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-07-10 18:52 -0700
  Re: Struct and Union Tim Rentsch <txr@alumni.caltech.edu> - 2015-07-10 19:12 -0700

csiph-web