Subject: Re: Curious SYNOPSIS in signal(3)
To: Eric Jacoboni <jaco@teaser.fr>
From: Greg A. Woods <woods@weird.com>
List: current-users
Date: 06/26/2002 11:20:02
[ On , June 26, 2002 at 09:11:06 (+0200), Eric Jacoboni wrote: ]
> Subject: Re: Curious SYNOPSIS in signal(3)
>
> >>>>> "Greywolf" == Greywolf <greywolf@starwolf.com> writes:
>
> Greywolf> # it could be nice to add it in the synopsis as an
> Greywolf> alternative for the # basic syntax.
>
> Greywolf> How is typedef'ing it clearer than inlining it?
>
> Trust me: for some people, it is. I teach system programmation and i
> see every year that students prefer this notation.
Be careful that you understand why they prefer the typedef'ed notation.
I suspect it is only because it's easier to read and easier to type. I
doubt they have a deeper understanding -- indeed I'll bet they have a
much more superficial understanding. Any of your students who's not
learned to use either notation equally proficiently will likely fail any
C interview test I'd give them because I'll trick them with typedef
names they don't know and then turn around and require them to write
declarations for functions returning a pointer to a function that
doesn't give them enough memory clues to remember the signal()
declaration and to simply regurgitate it by rote.
I just realised though that the prototype declaration given in the
manual page is wrong (yesterday when I looked at it I just though that
maybe ANSI/ISO syntax was worse than I had thought, but now when I look
at the actual headers I discover the correct declaration isn't quite so
stupid looking:
void (*signal(int signo, void (*func)(int)))(int);
(The semicolon statement terminator appearing before the actual end of
the statment had me really worried there for a little while, and it's
almost the pathalogical case for such a declaration so I had to look it
up myself!)
Now to see if mdoc(7) will allow an easy fix to the mess in signal(3)...
This is the best hack I can do, so I'll send-pr it:
.\" we can not write decls using function pointers with .Fn yet
.Ft void
.br
.Ic ( *signal (
.Ft int
.Fa signo ,
.Ft void
.Pq Fa *func
.Po
.Vt int
.Pc
.No ))
.Po
.Vt int
.Pc
.No ;
--
Greg A. Woods
+1 416 218-0098; <gwoods@acm.org>; <g.a.woods@ieee.org>; <woods@robohack.ca>
Planix, Inc. <woods@planix.com>; VE3TCP; Secrets of the Weird <woods@weird.com>