Here's a simple and delicate question. Could someone explain the difference between a and b?

```
void (*a)(int x, int y)
void (*b(int x, int y))(int)

```

This question arise from the following Linux function declaration:

```
void (*signal(int sig, void (*func)(int)))(int);

```

Solution
--------

The following program makes a good demo.

```
#include <signal.h>
#include <stdio.h>
#include <unistd.h>

void ouch(int sig)
{
   printf("OUCH! - I got signal %d\n", sig);
   signal(SIGINT, SIG_DFL);
}

void (*g())(int) // just like the b
{
   return ouch;
}

int main()
{

   void (*f)(int); // just like the a
   f=g();
   signal(SIGINT, f);

   while(1)
   {
      printf("Hello, world!\n");
      sleep(1);
   }
}

```