(no subject)

From: Edward Glamkowski (EGlamkowski@MATHEMATICA-MPR.COM)
Date: 09/29/97


        Well, I decided to try my hand at converting Circle to
C++ (mostly because I just got the O'Reilly book "Practical
C++ Programming" and wanted a big, 'live' program to work
on :)

        I got through 99% of it without trouble, but then
encountered something I had never seen before.  Fortunately,
I has Eric Green's DGC code with me, which I know works
(and I trust Eric's coding abilities :) and was able to
compare code and get it to work, so now I have a Circle
source that compiles with g++ on RedHat Linux :P

        Anyway, this error is really a C thing more than a
circle thing, but it occurs in the context of circle, so
I'll ask here.

comm.c: 1554: passing 'void(*)()' as argument 2 of 'my_signal(int,
void(*)(int))'

line 1554 of comm.c:
my_signal(SIGUSR1, reread_wizlists);

my_signal has this prototype:
sigfunc *my_signal(int signo, sigfunc * func);

reread_wizlists prototype:
RETSIGTYPE reread_wizlists(void);

Neither of these helped me very much, so I took a look
at RETSIGTYPE:
#define RETSIGTYPE void

which is no problem, but then looking a sigfunc:
typedef RETSIGTYPE sigfunc(int);

        Now I understand the general use of typedef, but I
have never seen it used with anything like that '(int)'
before.  Obviously that was the problem, but I couldn't find
anything in any of my C or C++ books on this type of usage
of typedef, so I was completely stumped.
        By comparing with Eric's code, I was able to deduce
the meaning of this typedef usage (the fix, btw, was to
change reread_wizlists to:
RETSIGTYPE reread_wizlists(int i);
along with the other similar functions in comm.c), but
I was wondering if anybody could point me to a source that
would document this type of usage of typedef (and any
other unusual usages there may be).


Edward Glamkowski, Programmer           Mathematica Policy Research
EGlamkowski@mathematic-MPR.COM          Princeton, NJ
                http://www.mathematica-mpr.com/

"When they call roll in the senate, the Senators do not know whether
         to answer 'Present' or 'Not Guilty'."  -Theodore Roosevelt


     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
     +------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/08/00 PST