ryan@arisia.Xerox.COM (Michael Ryan) (12/13/90)
In article <14861@arisia.Xerox.COM> ryan@arisia.Xerox.COM (Michael Ryan) writes: >I am trying to figure how to change the 'pointer to function returning int' >type from a typedef into an inline definition. the usage would be for a >function that returns a pointer to a function returning an int. > >e.g: >/* in file main.c */ >typedef int (*pfi)(); >extern pfi dave(); thanks to dkeisen@gang-of-four.stanford.edu, karl@ima.isc.com, pds%lemming.webo.dg.com@relay.cs.net, fwa@gupta.portal.com, and jerbil@cobalt.cco.caletch.edu. first, the type: a function that returns a pointer to a function that returns an int == int (*dave())() next, the method: 0. start by keeping some things in mind: a. start with the actual thing being defined. in this case 'dave.' b. "postfix modifiers have higher precedence that prefix modifiers; parenthesis can be used to override this." e.g. '()' has higher precedence than '*.' in our case this means we'll need parenthesis to bind a '*' to dave because we follow it immediately with a '().' (step 3) c. function have arguments. denoted here by '...' 1. 'dave' is a function: dave(..) 2. that returns a pointer: *dave(...) 3. to a function: (*dave(...))() 4. that returns an int: int (*dave(...))() NOTE: in step 3 without the parenthesis the compiler would bind the expression so (cdecl): declare dave as function returning function returning pointer to int we can then use this definition so: int fred() { return 2; }; int (*dave())() { return fred;}; one thing, this was meant as an exercise not as a production item. as one of the respondents pointed out, using the typedef is much more clear and should be used in production-level code. ( whew!) thanks again //michael j ryan -- michael ryan ryan@arisia.Xerox.COM ""