1 | void (*signal (int sigNum, void (*sigHandler)(int))) (int); |
乍一看这个函数原型就被唬住了,跟个指针似的。仔细分析一下,
*signal (int sigNum, void (*sigHandler)(int))
部分里面
(int sigNum, void (*sigHandler)(int))
优先级高于signal前面的*,所以这是个函数,*只是返回值的一部分,即返回的应该是一个指针。这个指针式什么类型的取决于
(*signal (int sigNum, void (*sigHandler)(int)))
外面的部分,前面是void,后面是(int),可见signal函数返回的是一个函数指针,其函数原型为void f(int)。返回的这个指针与signal的第二个参数的类型是一样的。于是乎,这个bt的函数原型声明还可以这样来定义:
1 2 | typedef void sigHandler(int); sigHandler *signal(int, sigHandler *); |
抑或是
1 2 | typedef void (*psigHandler)(int); psigHandler signal(int, psigHandler); |
这种声明看起来真累!