Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | Ben Bacarisse <ben.usenet@bsb.me.uk> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: Struct and Union |
| Date | 2015-07-10 21:48 +0100 |
| Organization | A noiseless patient Spider |
| Message-ID | <87io9rwxgh.fsf@bsb.me.uk> (permalink) |
| References | <a653fc98-5fae-48ff-ba1c-d7b53adee150@googlegroups.com> |
janus <emekamicro@gmail.com> writes:
> 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;
>
>
> 2)
> typedef struct CStatement
> {
> int stype;
>
> void* sstatement;
>
> }CStatement;
I'd like to offer a third:
typedef struct CStatement CStatement;
That's all that anyone usually sees, so you have to pass these things
around as pointers -- usually with a const on the target type.
Only in once place (one translation unit as C calls them, but it's C's
idea of a module) do you expand on this. In that module, I'd use
struct CStatement
{
int stype;
void *statement;
};
and provide a number of type-safe interface functions:
void set_printstatement(CStatement *stmt, const CPrintStatement *cps)
{
stmt->stype = PRINT;
stmt->statement = cps;
}
CPrintStatement *get_printstatement(const CStatement *stmt)
{
return stmt->stype == PRINT ? stmt->statement : NULL;
/* Or do some other sort of error handling */
}
There are a gazillion ways to make the definitions simpler to write and
maintain but I hope you get the drift. The point is to hide this
implementation detail behind an opaque type. You may be writing the
rest of the code so it might seem like you could simply impose on
yourself some good behaviour rules about access to this structure but I
find I like to keep myself out of the parts of my code where I don't
belong (most of the time).
--
Ben.
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