bdr@neti1.uucp (Brian Renaud) (07/13/88)
I am writing a function which, ideally, would take an optional
argument which would be a pointer to a function which returns a
pointer to a char. I am using a non-ansi <varargs.h> type compiler.
My code looks something like:
...
char *(*func)(); /* local variable to hold pointer */
...
func = va_arg(ap, char *(*)());
Unfortunately, va_arg turns the cast into something like:
(char *(*)() *) ...
instead of the desired:
(char *(**)() ) ...
Am I (quite likely) just making a dumb error here? If not, is there
some portable workaround to deal with this?
--
Brian Renaud bdr%huron.uucp@umix.cc.umich.edu
Huron Systems {umix,neti2}!huron!bdrark@alice.UUCP (07/16/88)
In article <161@neti1.uucp>, bdr@neti1.UUCP writes: > I am writing a function which, ideally, would take an optional > argument which would be a pointer to a function which returns a > pointer to a char. I am using a non-ansi <varargs.h> type compiler. > My code looks something like: > char *(*func)(); /* local variable to hold pointer */ ... > func = va_arg(ap, char *(*)()); > Unfortunately, va_arg turns the cast into something like: > (char *(*)() *) ... > instead of the desired: > (char *(**)() ) ... Yes indeed. Sorry about that -- the preprocessor is awfully literal-minded. Do it this way: typedef *(*MYPTR)(); ... MYPTR func; ... func = va_arg(ap,MYPTR);
tps@chem.ucsd.edu (Tom Stockfisch) (07/16/88)
In article <161@neti1.uucp> bdr@neti1.uucp (Brian Renaud) writes: X... I am using a non-ansi <varargs.h> type compiler. X ... X char *(*func)(); /* local variable to hold pointer */ X ... X func = va_arg(ap, char *(*)()); XUnfortunately, va_arg turns the cast into something like: X (char *(*)() *) ... Xinstead of the desired: X (char *(**)() ) ... X...workaround? try typedef char *(*PFPC)(); ... func = va_arg( ap, PFPC ); -- || Tom Stockfisch, UCSD Chemistry tps@chem.ucsd.edu
gwyn@brl-smoke.ARPA (Doug Gwyn ) (07/29/88)
In article <161@neti1.uucp> bdr@neti1.uucp (Brian Renaud) writes: >Unfortunately, va_arg turns the cast into something like: So, use a typedef.