我遇到了这段代码,完全无法理解它的含义。
#include <signal.h>
void (*signal(int sig, void (*func)(int)))(int);
对于第2行代码的详细解释是什么?
我知道void
和int
都是类型,*func是指向函数的指针,括号用于优先级。但我仍然不理解(*signal ...)、(int)以及整个声明组合在一起的含义。解释得越详细越好。
也许我已经知道这个声明的意义/效果。但我还需要进行更多尝试来帮助我理解正在发生的事情,如下所示:
1 #include <signal.h>
2 void (*signal)(int sig, void (*func)(int));
3 void (*signal)(int); // then void (signal)(int) again.
4 //void (*signal(int sig, void (*func)(int)))(int); //break this line into two lines above
5
6 int main(){}
在上面的代码中,我将 void (*signal(int sig, void (*func)(int)))(int)
拆分成了两行。在第3行,我尝试了 void (*signal)(int)
和 void (signal)(int)
这两种方式,但都出现了相同的错误结果,指示我正在尝试重新声明 signal
:
现在我知道这两个尝试的方式都是不正确的声明方法,但是它们为什么是不正确的?原始的声明方式为什么不算是重新声明?TestDeclaration.c:2: error: 'signal' redeclared as different kind of symbol /usr/include/signal.h:93: error: previous declaration of 'signal' was here
TestDeclaration.c:3: error: 'signal' redeclared as different kind of symbol /usr/include/signal.h:93: error: previous declaration of 'signal' was here