当我读到其他人的代码时,我总是有点难过,这些代码的typedef用于指向带参数的函数的指针.我记得在尝试理解用C语言编写的数值算法时,我花了一些时间来解决这个定义.那么,您是否可以分享您关于如何编写好的typedef指向函数(Do和Do)的提示和想法,为什么它们有用以及如何理解其他人的工作?谢谢!
我正要为我们这里的应用程序添加一个额外的信号处理程序,我注意到作者已经习惯sigaction()了设置其他信号处理程序.我打算用signal().按照惯例我应该使用,sigaction()但如果我是从头开始写,我应该选择哪个?
我遇到了这段代码,完全迷失了解释它的含义.
#include <signal.h>
void (*signal(int sig, void (*func)(int)))(int);
Run Code Online (Sandbox Code Playgroud)
第2行代码的详细解释是什么?
我知道void并且int是类型,*func是函数的指针,括号是优先级.但是我仍然没有把(*信号......),(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(){}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我void (*signal(int sig, void (*func)(int)))(int)分成了两行.对于3号线,我都尝试void (*signal)(int)和void (signal)(int),与表明我试图重新声明同样的错误的结果signal:
TestDeclaration.c:2:错误:'signal'重新声明为不同类型的符号/usr/include/signal.h:93:错误:先前'signal'的声明在这里
TestDeclaration.c:3:错误:'signal'重新声明作为不同类型的符号/usr/include/signal.h:93:错误:之前的'信号'声明就在这里
现在我知道两种审判都是不正确的申报方式,但为什么它们不正确呢?为什么声明的原始方式不是重新声明?