fuck (int *fun(int)); 为什么这玩意能通过编译?解决思路

fuck (int *fun(int)); 为什么这玩意能通过编译?
fuck (int *fun(int));
为什么这玩意能通过编译?

------解决方案--------------------
C/C++ code
[User:root Time:15:19:27 Path:/home/liangdong/c]$ ./output 
5
[User:root Time:15:19:28 Path:/home/liangdong/c]$ cat src/main.c 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void fuck(int* fun(int)) {
        fun(5);
}

int* function(int n) {
        printf("%d\n", n);
        return NULL;
}

int main(int argc, char* const argv[]) {
        fuck(function);
        return 0;
}

------解决方案--------------------
探讨

我的意思是前面没有void

------解决方案--------------------
你只要理解C/C++的类型派生方式是递归就能理解如何阅读复杂的派生类型了。
http://blog.****.net/supermegaboy/article/details/4854965

------解决方案--------------------
void ( *signal( int sig, void (* handler)( int ))) ( int );

这个比较简单了 在解释语法的时候 先抓住优先级;

(1)这是一个函数,函数名字为 signal
(2)signal参数有两个 第一个 参数 为 int sig, 第二个参数为一个函数指针handler,函数指针类型为 void (int)
(3)这个函数的返回值 为一个指针,通过发现是一个函数指针,类型为 void (int)


PS:你可以看下C专家编程里面说的比较清楚,另外自己写代码的时候最好先用typedef定义好类型,不然看起来太乱。
------解决方案--------------------
探讨

int (*Register (int (*pf)(int)))(int)
我是被这条语句弄傻的,看不明白;
能再解释一下这条语句么?