Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!aioe.org!eternal-september.org!feeder.eternal-september.org!.POSTED!not-for-mail From: Uncle Steve Newsgroups: comp.lang.c Subject: Re: Types in C Date: Mon, 23 May 2011 19:33:13 -0400 Organization: Friends of the Galactic Collective Lines: 97 Message-ID: <56d1adcc041e87f-81300@gmail.com> References: <43d4ef5f7d2b0f9-0f635@gmail.com> <9401m9Ft2pU9@mid.individual.net> <50d915539d62563-19304@gmail.com> <9405q4Ft2pU12@mid.individual.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 8bit Injection-Info: mx04.eternal-september.org; posting-host="job9yP/rmK/fxQbJrcqEcA"; logging-data="10528"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/h/as/gFb85lkGyFIkzu4g" User-Agent: nn 6.7.3 Content-Length: 3688 Cancel-Lock: sha1:aDn0CMuf2CHx2e3gwm4mA2ECkzQ= Xref: x330-a1.tempe.blueboxinc.net comp.lang.c:4627 On Tue, May 24, 2011 at 10:35:48AM +1200, Ian Collins wrote: > On 05/24/11 09:53 AM, Uncle Steve wrote: > >On Tue, May 24, 2011 at 09:25:29AM +1200, Ian Collins wrote: > >>On 05/24/11 08:51 AM, Uncle Steve wrote: > >>>On Mon, May 23, 2011 at 07:45:24PM +0000, Seebs wrote: > >>>>On 2011-05-23, Keith Thompson wrote: > >>>>>Just a quibble: size_t may be exactly the same type as unsigned long, > >>>>>since a typedef merely creates an alias for an existing type, not > >>>>>a new and distinct type. plain char and signed char (for example) > >>>>>are distinct in a way that size_t and unsigned long (for example) > >>>>>are not. > >>>> > >>>>True. Although, possibly confusingly, there are places where it seems > >>>>that the thing a typedef creates is itself then called "a type". The > >>>>wording is a bit fuzzy. > >>>> > >>>>We all know what we mean, I think. You could say it several ways: > >>>> > >>>> Typedef does not actually create types; instead, it creates > >>>> names which refer to existing types. > >>>> > >>>> Typedef creates types, but those types are identical to existing > >>>> types and can be used interchangably with them. > >>> > >>>How about the idea that typedefs create aliases for the basic built-in > >>>types supplied by the language spec.? > >> > >>A typedef may provide an alias to any existing type, built-in, user > >>defined or even incomplete. > > > >There are no "user defined" types in C. > > If they aren't defined buy programmers, who are they defined by? The compiler writers. See my recent reply to Peter Seebach. > >Structures and unions are > >aggregates of basic types (and structures/unions). > > Well if you want to be pedantic, unions aren't aggregate types because > they can only contain one member at a time. > > Let's expand the above for completeness: > > A typedef may provide an alias to any existing type, built-in, > aggregate, union, composite or even incomplete. > > There, did I leave anything out? No, it seems very reasonable. > >I believe > >incomplete types are a (usually temporary) artifact of the compilation > >process and you won't ever see them in a running program. > > Have you ever used void*? What about a library with an opaque handle type? void * is a non-specific pointer, with special semantics contrasted to normal pointer types. It is not "incomplete". Perhaps my internal representation of "incomplete type" is wrong. I labor under the delusion that a structure defined with an element whose type is not known is incomplete: struct incomplete { int foo; struct bar something; }; until the compiler encounters a definition of "struct bar", struct incomplete is precisely that, and cannot be used to define anything. This produces an error if there is no struct bar definition because the compiler cannot guess what code to generate. Hence, it would never be encountered at run-time. Please correct me if this is not the case. > >BTW, have a look at the gmp.h header and note that they do not shy > >away from macro-like functions. Not that I care a whole lot, but I'd > >say the writers of the gmp library probably know more than you do > >about the suitability of inline functions versus macros and when to > >use each. Just a 'feeling' on the matter, which is not to say that > >you're entirely wrong. > > gmp has been around for a long time, well before inline function support > was common in C compilers (or even standardised). I think they expect old platforms to use old versions of gmp. Regards, Uncle Steve -- Should a professional politician be charged with molestation if he kisses babies while attending political rallies?