那么有人可以解释这应该做什么:
void (*signal(int sig, void (*func)(int)) ) (int);
Run Code Online (Sandbox Code Playgroud)
它是从标准信号库中获得的定义.
从名称开始:
signal
Run Code Online (Sandbox Code Playgroud)
尽可能向右走:
signal(int sig, void (*func)(int))
Run Code Online (Sandbox Code Playgroud)
你有一个带括号的参数列表,所以它是一个带有2个参数的函数:一个int命名sig和一个名为的函数指针func(你可以稍后用同样的方法对它进行分析).
然后你打了另一个右边的人,所以你向左走:
*signal(int sig, void (*func)(int))
Run Code Online (Sandbox Code Playgroud)
所以函数signal返回一个指向......的东西.让我们取下括号并再次右转,因为我们可以:
(*signal(int sig, void (*func)(int)) ) (int)
Run Code Online (Sandbox Code Playgroud)
我们再次有一个带括号的参数列表,因此signal返回一个指向函数的指针,该函数将一个int参数作为唯一参数.然后再左转:
void (*signal(int sig, void (*func)(int)) ) (int)
Run Code Online (Sandbox Code Playgroud)
因此,该函数signal返回指向函数获取int和返回的指针void.
是的,这种语言很奇怪,但至少它是一致的.:)
该函数signal作为参数:
int sig - a signal value
void (*func)(int) - a pointer to a function that takes an int and returns void
Run Code Online (Sandbox Code Playgroud)
并返回:
void (*)(int) - a function that takes an int and returns void
Run Code Online (Sandbox Code Playgroud)
signal 注册信号发生时要调用的函数,并返回前一个函数处理程序.
| 归档时间: |
|
| 查看次数: |
762 次 |
| 最近记录: |