🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.std.c
Article #6012

Re: Multiple typedefs

#6012
From: Norman Diamond
Date: Mon, 08 May 1989 01:57
89 lines
3710 bytes
In article <12937@haddock.ima.isc.com> suitti@haddock.ima.isc.com (Stephen Uitti) writes:

>Four design options come to mind:

>1. Omit typedef from the language.  People will then not be tempted to
>   use it.
>Option 1) is what my choice would have been at the dawn of time
>(which is sometime before i knew any C).  Typedef functionality
>can be obtained with #defines.  Of course, enums would also be
>gone, replaced by #defines.

Option 1) was in fact the case at the dawn of time.  The C community
discovered that this was one of the things that Pascal did right, and
it was copied (clumsily) into C.

>2. iftypedef(x), untypedef(x), and possibly retypedef(x, y).  Example:
>	iftypedef(mode_t) {
>		untypedef(mode_t);
>		retypedef(mode_t, (char *));
>	}
>Option 2) is a hack on a kludge.  In particular it makes typedef stuff
>look executable.

That's exactly true.  These kinds of operations are expected more at the
preprocessing stage.  If you can design some preprocessing directives
that would handle this problem correctly and not be too difficult to
implement, you might get it into C-0X  (the next standard after C-89).

>3. Disallow typedef definitions using typedef'ed symbols.  Allow
>   typedef foo int;
>   typedef foo int;
>   to work.
>Option 3) doesn't support "complex declarations".

typedef definitions using typedef'ed symbols really are important.
Anyway, gcc does allow duplicate typedefs if they match (warning about
shadows instead of giving an error).  So complex declarations can still
be permitted, and shadows can still be allowed.  Any vendor who has
trouble with these could perhaps distribute gcc instead of their own
C compiler.

>4. Disallow
>   typedef foo *foo;
>   that is, self-referential typedefs.

Huh?  typedef foo *foo;  is already illegal.  It is self-contradictory,
not just self-referential.

>Then allow
>   typedef foo int;
>   typedef foo int;
>   to work,

as in Option 3) above

>   or even
>   typedef u_int unsigned int;
>   typedef foo unsigned int;
>   typedef foo u_int;	/* synonym - it is the same */
>   to work.

unsigned unsigned x;  does not become a valid declaration, no matter
what you do with typedefs (though it was legal in K&R, again no matter
what you do with typedefs).  What happens next:
typedef signed foo int;  is this equivalent to
typedef signed unsigned int int;

>Be real.

That's good advice.  Take it!

>Typedefs are nuisance synonyms that seldom have real use

This is completely false.

>(the UN*X kernel is one of those "seldom" places

It is one of those "many" places.

>- nothing i've ever written outside the kernel would benefit by them.

So _you_ haven't done any real programming outside the kernel.
Big deal.

--
Norman Diamond, Sony Computer Science Lab (diamond%csl.sony.co.jp@relay.cs.net)
  The above opinions are my own.   |  Why are programmers criticized for
  If they're also your opinions,   |  re-inventing the wheel, when car
  you're infringing my copyright.  |  manufacturers are praised for it?
Technical Details
Message-ID: <10224@socslgw.csl.sony.JUNET>
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!csd4.milw.wisc.edu!lll-winken!uunet!kddlab!titcca!sragwa!wsgw!socslgw!diamond!diamond
References: <2322@lethe.UUCP> <10167@smoke.BRL.MIL> <2402@lethe.UUCP> <10190@smoke.BRL.MIL> <12937@haddock.ima.isc.com>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!csd4.milw.wisc.edu!lll-winken!uunet!kddlab!titcca!sragwa!wsgw!socslgw!diamond!diamond
From: diamond@diamond.csl.sony.junet (Norman Diamond)
Newsgroups: comp.std.c
Subject: Re: Multiple typedefs
Keywords: typedefs, includes, defines
Message-ID: <10224@socslgw.csl.sony.JUNET>
Date: 8 May 89 01:57:58 GMT
References: <2322@lethe.UUCP> <10167@smoke.BRL.MIL> <2402@lethe.UUCP> <10190@smoke.BRL.MIL> <12937@haddock.ima.isc.com>
Sender: news@csl.sony.JUNET
Reply-To: diamond@csl.sony.junet (Norman Diamond)
Organization: /usr/lib/news/organization
Lines: 89