咋一看这种原地打转的做法好像无甚意义,其实不然。
-
C标准库有个函数叫signal,它肯定不是众多库函数中最复杂的,但是

我相信大多数人第一眼看到它的时候,都会高声惊呼:
“天呐!这是个什么鬼东西?”
-
为了解释这个魔鬼声明到底在说啥,一般会先祭出一个typedef:
typedef void (*sig_func)(int);
然后signal的声明就可以改写成:
sig_func signal(int sig, sig_func func);
看着很唬人,其实就是参数里面有个函数指针,返回类型也是函数指针。
-
N3450要解决的也是同样的问题,只不过现在我们有typeof了,就不需要再写个typedef了:
typeof(void (int)) *signal(int sig, typeof(void (int)) *func);
这样看着也是舒服多了,毕竟typedef再怎么好也要占用一个标识符呢。
-
话说typeof作为一个GNU扩展也存在挺长时间了,不过现在头文件里面好像还没有这种写法。