Path: utzoo!utgpu!news-server.csri.toronto.edu!bonnie.concordia.ca!thunder.mcrcim.mcgill.edu!snorkelwacker.mit.edu!bloom-beacon!eru!hagbard!sunic!ugle.unit.no!nuug!ifi!enag From: enag@ifi.uio.no (Erik Naggum) Newsgroups: comp.std.c Subject: Re: typedefing functions (Re: Is typedef char BUFFER[20] legal?) Message-ID: Date: 4 Feb 91 18:28:19 GMT References: <1212@tredysvr.Tredydev.Unisys.COM> <1991Jan29.210100.8105@zoo.toronto.edu> <22642@netcom.UUCP> <1991Feb3.000128.15980@zoo.toronto.edu> <1991Feb4.053613.3758@watmath.waterloo.edu> Sender: enag@ifi.uio.no (Erik Naggum) Followup-To: comp.std.c Organization: Naggum Software, Oslo, Norway Lines: 47 In-Reply-To: datangua@watmath.waterloo.edu's message of 4 Feb 91 05:36:13 GMT In article <1991Feb4.053613.3758@watmath.waterloo.edu>, David Tanguay writes: > Our compiler had a neat bug with this. It would accept, e.g., > typedef int f( int a ) { return a+1; } > "f" would be a type thereafter in that file, but it was also created > as an external visible only outside that file. Syntactically typedef > is the same as static or extern. > Is the above typedef valid in ANSI-C (as a typedef)? It's not a > valid function declaration (has to be static or extern), but I can't > recall anything making it an invalid typedef. No. You cannot achieve function type through typedef. I remember this phrase from the standard, but can't find it right now. Note that you can say typedef int f (int a, char *b); and later say f foo, bar, zot; and f *functab[3] = { foo, bar, zot, }; The functions would be declared f foo { ... } f bar { ... } f zot { ... } This will, naturally, make programs like ctags somewhat less likely to find the functions, but it's a very good way to provide consistent interface to functions that are referenced only through function pointers. -- [Erik Naggum] Naggum Software, Oslo, Norway