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


Groups > comp.lang.c > #18387

Re: Am I being too C++ like?

From nick_keighley_nospam@hotmail.com
Newsgroups comp.lang.c
Subject Re: Am I being too C++ like?
Date 2012-03-09 04:18 -0800
Organization http://groups.google.com
Message-ID <29542605.593.1331295536056.JavaMail.geo-discussion-forums@vbux23> (permalink)
References (3 earlier) <kfny5sn1p0y.fsf@x-alumni2.alumni.caltech.edu> <lnzkd3wirb.fsf@nuthaus.mib.org> <kfnobtjxb9g.fsf@x-alumni2.alumni.caltech.edu> <lnhazauzlw.fsf@nuthaus.mib.org> <kfnd38mstxq.fsf@x-alumni2.alumni.caltech.edu>

Show all headers | View raw


On Thursday, March 8, 2012 8:45:37 PM UTC, Tim Rentsch wrote:
> Keith Thompson <kst-u@mib.org> writes:
> > Tim Rentsch <txr@alumni.caltech.edu> writes:
> >> Keith Thompson <kst-u@mib.org> writes:
> >>> Tim Rentsch <txr@alumni.caltech.edu> writes:
> >>>> Jorgen Grahn <grahn+nntp@snipabacken.se> writes:
> >>>>> On Sat, 2012-01-21, Marco wrote:


> >>>>>> keep using typedef ignore the naysayers

<snip>

> >>> A typedef for a struct type creates a new name (such as "foo") for a
> >>> type that already has a perfectly valid name (such as "struct foo").

yes but its a long ugly name. The C++ people seem to agree, once you've defined a struct you don't have to scatter "struct" keywords about the place.

<snip>

> >> [...] the most
> >> important use case for typedef'ing a struct is to make a
> >> (mostly) opaque type, 

"...an important reason for typedef'ing a struct is to make an opaque type"

<snip>

> > Yes, if you want an opaque type, a typedef is perfectly 
> > appropriate; I should have mentioned that.  By "opaque" in this 
> > case, I mean that the code that uses the type doesn't need to 
> > know or care that the type is a struct.
> >
> > I haven't seen a whole lot of code like that.  It's more common, at
> > least in code I've seen, to declare a typedef for a struct type 
> > and then write code that freely refers to its members.
> 
> That's easy to believe, and I think part of the reason for that
> happening is lots of people giving blanket advice like "don't use
> typedefs for structs" rather than talking about opaque types and
> why it's good to use them.  Hearing so many comments about not
> using typedefs, it's easy for people to come away with the wrong
> lesson.

but that's not the only reason that people typedef structs. I do it becasue I think the syntax is poor. I hide other hard-to-read declaration syntax behind typedefs for the same reason. I don't do it because I got confused about opaque types.

So I don't think they have "learned the wrong lesson"

> >>> Using distinct identifiers for the tag and the typedef name are
> >>> different identifers, which is very common, can lead to confusion.
> >>
> >> I can't really parse your sentence,
> >
> > Bad editing on my part; delete "are different identifiers".
> >
> >>                                     but in any case it seems
> >> mostly orthogonal to the question about whether it's a good
> >> idea to use a typedef.  Even though tags and typedef names
> >> are in different name spaces, there can be confusion between
> >> them, and they should be chosen with that possibility kept in
> >> mind.  It's easy to avoid confusion just by following some
> >> sort of naming convention, such as (for example) appending
> >> an '_s' to any struct tag that has an associated typedef.
> >> (Or whatever other convention is suitable for the context,
> >> that was meant just as an example.)
> >
> > Too may programmers *don't* follow any particular convention.
> > I see plenty of code like:
> >
> >     typedef struct foo {
> >         /* ... */
> >     } bar;
> >
> > where the names "foo" and "bar" don't have any particular relationship.
> >
> > Strictly following some naming convention (like "typedef struct foo_s {
> > ... } foo") is better, but that's still two different identifiers to
> > keep track of.  Using the same identifier for both is even better.
> 
> Actually I don't agree with this last piece of advice, but it
> should be mostly irrelevant because properly done a struct
> that is typedef'ed has its tag appear in a very small number of
> places, ideally just two or three.
> 
> 
> >>> Using a typedef for a struct type has few benefits.  The
> >>> drawbacks are not terribly serious if you do it right,

what drawbacks?

 but
> >>> in my opinion the benefits are minor enough that it's not
> >>> worth doing.
> >>
> >> You haven't listed any of what you think are benefits.
> >> I'm curious to know what those might be.
> 
> Promoting opaque types, and information hiding, are two of the
> most important.
> 
> > I mentioned it later: it gives the type a name that's a single
> > identifier, and saves a little typing.

<snip>

> >> To my way of thinking the main reason to use typedef names
> >> is to encourage use of information hiding and viewing of
> >> various entities as abstract data types.
> > [...]
> >
> > I agree that that's the main *appropriate* reason to use typedefs for
> > structs.  Unfortunately, it's not the main reason programmers actually
> > use them.
> 
> But that's a reason to talk about information hiding, ADT's, and
> opaque types /more/, not to insist more strenuously that typedefs
> shouldn't be used.  If you show examples of where it's good to
> typedef a struct, that will both strengthen an understanding of
> information hiding and ADT's, etc, and also make comments about
> when /not/ to use typedefs more effective. 

always supposing the heavy typedefers actually /are/ confused

 Always typedef'ing
> is bad;  never typedef'ing is bad.  A good developer needs to
> understand the problems of both extremes.

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


Thread

Am I being too C++ like? nroberts <roberts.noah@gmail.com> - 2012-01-18 13:53 -0800
  Re: Am I being too C++ like? Shao Miller <sha0.miller@gmail.com> - 2012-01-18 18:50 -0500
    Re: Am I being too C++ like? Nobody <nobody@nowhere.com> - 2012-01-19 04:13 +0000
    Re: Am I being too C++ like? ImpalerCore <jadill33@gmail.com> - 2012-01-19 09:09 -0800
  Re: Am I being too C++ like? Philip Lantz <prl@canterey.us> - 2012-01-18 21:42 -0800
  Re: Am I being too C++ like? Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-01-19 12:30 +0000
    Re: Am I being too C++ like? "BartC" <bc@freeuk.com> - 2012-01-19 15:17 +0000
      Re: Am I being too C++ like? Keith Thompson <kst-u@mib.org> - 2012-01-19 18:44 -0800
        Re: Am I being too C++ like? "BartC" <bc@freeuk.com> - 2012-01-20 13:44 +0000
          Re: Am I being too C++ like? Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-01-20 09:08 -0500
            Re: Am I being too C++ like? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2012-01-20 07:58 -0800
            Re: Am I being too C++ like? Keith Thompson <kst-u@mib.org> - 2012-01-20 11:25 -0800
            Re: Am I being too C++ like? Kleuske <kleuske@nowhere.net> - 2012-01-20 20:17 +0000
              Re: Am I being too C++ like? Ian Collins <ian-news@hotmail.com> - 2012-01-21 09:23 +1300
                Re: Am I being too C++ like? Kleuske <kleuske@nowhere.net> - 2012-01-20 22:00 +0000
                Re: Am I being too C++ like? Stephen Sprunk <stephen@sprunk.org> - 2012-01-20 16:28 -0600
                Re: Am I being too C++ like? Ian Collins <ian-news@hotmail.com> - 2012-01-21 11:43 +1300
                Re: Am I being too C++ like? Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-01-20 18:02 -0500
                Re: Am I being too C++ like? Keith Thompson <kst-u@mib.org> - 2012-01-20 16:12 -0800
                Re: Am I being too C++ like? Kaz Kylheku <kaz@kylheku.com> - 2012-01-21 00:13 +0000
                Re: Am I being too C++ like? William Ahern <william@wilbur.25thandClement.com> - 2012-01-20 17:37 -0800
                Re: Am I being too C++ like? Keith Thompson <kst-u@mib.org> - 2012-01-20 22:25 -0800
                Re: Am I being too C++ like? gazelle@shell.xmission.com (Kenny McCormack) - 2012-01-21 16:07 +0000
                Re: Am I being too C++ like? Bill Reid <hormelfree@gmail.com> - 2012-01-23 17:26 -0800
                Re: Am I being too C++ like? Kaz Kylheku <kaz@kylheku.com> - 2012-01-21 18:00 +0000
                Re: Am I being too C++ like? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-01-21 21:25 +0000
                Re: Am I being too C++ like? Phil Carmody <thefatphil_demunged@yahoo.co.uk> - 2012-02-11 23:46 +0200
                Re: Am I being too C++ like? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-02-11 22:56 +0000
                Re: Am I being too C++ like? Phil Carmody <thefatphil_demunged@yahoo.co.uk> - 2012-02-22 02:34 +0200
                Re: Am I being too C++ like? Jens Gustedt <jens.gustedt@loria.fr> - 2012-01-21 22:42 +0100
                Re: Am I being too C++ like? James Kuyper <jameskuyper@verizon.net> - 2012-01-21 21:22 -0500
                Re: Am I being too C++ like? Jens Gustedt <jens.gustedt@loria.fr> - 2012-01-22 14:56 +0100
                Re: Am I being too C++ like? Ian Collins <ian-news@hotmail.com> - 2012-01-22 10:29 +1300
                Re: Am I being too C++ like? Kleuske <kleuske@nowhere.net> - 2012-01-21 11:36 +0000
              Re: Am I being too C++ like? Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-01-22 12:13 +0000
                Re: Am I being too C++ like? Kleuske <kleuske@nowhere.net> - 2012-01-22 12:39 +0000
                Re: Am I being too C++ like? Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-01-23 23:45 +0000
                Re: Am I being too C++ like? Kleuske <kleuske@nowhere.net> - 2012-01-24 16:54 +0000
            Re: Am I being too C++ like? Nick Keighley <nick_keighley_nospam@hotmail.com> - 2012-01-22 04:43 -0800
              Re: Am I being too C++ like? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-01-22 15:29 +0000
          Re: Am I being too C++ like? Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-01-21 11:58 +0000
          Re: Am I being too C++ like? Seebs <usenet-nospam@seebs.net> - 2012-01-21 21:32 +0000
  Re: Am I being too C++ like? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2012-01-19 04:23 -0800
    Re: Am I being too C++ like? Rui Maciel <rui.maciel@gmail.com> - 2012-01-19 14:39 +0000
    Re: Am I being too C++ like? Nick Keighley <nick_keighley_nospam@hotmail.com> - 2012-01-22 05:14 -0800
      Re: Am I being too C++ like? Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-01-23 23:42 +0000
  Re: Am I being too C++ like? Rui Maciel <rui.maciel@gmail.com> - 2012-01-19 14:51 +0000
  Re: Am I being too C++ like? jgk@panix.com (Joe keane) - 2012-01-19 23:04 +0000
  Re: Am I being too C++ like? Ian Collins <ian-news@hotmail.com> - 2012-01-20 16:03 +1300
    Re: Am I being too C++ like? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2012-01-20 06:01 -0800
      Re: Am I being too C++ like? Ian Collins <ian-news@hotmail.com> - 2012-01-21 08:03 +1300
        Re: Am I being too C++ like? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2012-01-21 12:31 -0800
          Re: Am I being too C++ like? Ian Collins <ian-news@hotmail.com> - 2012-01-22 10:18 +1300
  Re: Am I being too C++ like? cri@tiac.net (Richard Harter) - 2012-01-20 05:22 +0000
  Re: Am I being too C++ like? Marco <prenom_nomus@yahoo.com> - 2012-01-21 07:29 -0800
    Re: Am I being too C++ like? Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-01-24 12:13 +0000
      Re: Am I being too C++ like? Tim Rentsch <txr@alumni.caltech.edu> - 2012-01-31 14:32 -0800
        Re: Am I being too C++ like? Keith Thompson <kst-u@mib.org> - 2012-01-31 15:32 -0800
          Re: Am I being too C++ like? Keith Thompson <kst-u@mib.org> - 2012-01-31 19:46 -0800
          Re: Am I being too C++ like? Shao Miller <sha0.miller@gmail.com> - 2012-01-31 23:54 -0500
            Re: Am I being too C++ like? Keith Thompson <kst-u@mib.org> - 2012-01-31 22:24 -0800
          Re: Am I being too C++ like? Tim Rentsch <txr@alumni.caltech.edu> - 2012-01-31 23:28 -0800
            Re: Am I being too C++ like? Keith Thompson <kst-u@mib.org> - 2012-02-01 11:23 -0800
              Re: Am I being too C++ like? Stephen Sprunk <stephen@sprunk.org> - 2012-02-01 15:01 -0600
                Re: Am I being too C++ like? Malcolm McLean <malcolm.mclean5@btinternet.com> - 2012-02-01 14:09 -0800
                Re: Am I being too C++ like? Keith Thompson <kst-u@mib.org> - 2012-02-01 14:44 -0800
                Re: Am I being too C++ like? Shao Miller <sha0.miller@gmail.com> - 2012-02-01 17:36 -0500
              Re: Am I being too C++ like? Tim Rentsch <txr@alumni.caltech.edu> - 2012-03-08 12:45 -0800
                Re: Am I being too C++ like? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-03-08 21:41 +0000
                Re: Am I being too C++ like? Ian Collins <ian-news@hotmail.com> - 2012-03-09 17:42 +1300
                Re: Am I being too C++ like? Kaz Kylheku <kaz@kylheku.com> - 2012-03-09 08:12 +0000
                Re: Am I being too C++ like? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-03-09 12:01 +0000
                Re: Am I being too C++ like? Keith Thompson <kst-u@mib.org> - 2012-03-08 14:19 -0800
                Re: Am I being too C++ like? Tim Rentsch <txr@alumni.caltech.edu> - 2012-03-09 13:32 -0800
                Re: Am I being too C++ like? nick_keighley_nospam@hotmail.com - 2012-03-09 04:18 -0800
                Re: Am I being too C++ like? Ike Naar <ike@iceland.freeshell.org> - 2012-03-09 13:04 +0000
                Re: Am I being too C++ like? Kaz Kylheku <kaz@kylheku.com> - 2012-03-10 01:02 +0000
                Re: Am I being too C++ like? Ike Naar <ike@iceland.freeshell.org> - 2012-03-10 07:59 +0000
                Re: Am I being too C++ like? Ian Collins <ian-news@hotmail.com> - 2012-03-10 21:17 +1300
                Re: Am I being too C++ like? nick_keighley_nospam@hotmail.com - 2012-03-10 02:39 -0800
                Re: Am I being too C++ like? Tim Rentsch <txr@alumni.caltech.edu> - 2012-03-09 13:51 -0800
                Re: Am I being too C++ like? nick_keighley_nospam@hotmail.com - 2012-03-10 02:54 -0800
            Re: Am I being too C++ like? Ian Collins <ian-news@hotmail.com> - 2012-03-10 12:27 +1300
          Re: Am I being too C++ like? Rui Maciel <rui.maciel@gmail.com> - 2012-02-01 07:41 +0000
            Re: Am I being too C++ like? Keith Thompson <kst-u@mib.org> - 2012-02-01 11:24 -0800
        Re: Am I being too C++ like? Jorgen Grahn <grahn+nntp@snipabacken.se> - 2012-02-01 21:55 +0000

csiph-web