来自标准信号库的C声明

Ton*_*ion 7 c function

那么有人可以解释这应该做什么:

void (*signal(int sig, void (*func)(int)) ) (int);
Run Code Online (Sandbox Code Playgroud)

它是从标准信号库中获得的定义.

Kos*_*Kos 7

从名称开始:

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.

是的,这种语言很奇怪,但至少它是一致的.:)


Mar*_*nen 5

该函数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 注册信号发生时要调用的函数,并返回前一个函数处理程序.