Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| 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> |
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
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