我试图理解信号并从各种资源中学习.
我找到的一个资源就是这个.
这里的声明如下:
void (*signal(int, void (*)(int)))(int);
Run Code Online (Sandbox Code Playgroud)
而另一个就是这个.
这里的声明如下:
void (*signal(int sig, void (*func) (int)))(int);
Run Code Online (Sandbox Code Playgroud)
所以并排(!)他们是:
void (*signal(int, void (*)(int)))(int);
void (*signal(int sig, void (*func) (int)))(int);
Run Code Online (Sandbox Code Playgroud)
哪一个是正确的方式,为什么?
在函数类型中,参数可以但不需要具有名称.您无法对名称进行任何操作,它们充当了文档:
typedef bool(*checker_v1)(int);
typedef bool(*checker_v2)(int arg); // optional parameter name
checker_v1 f = is_even;
checker_v2 g = is_odd;
f = g; // f and g have the same type
typedef bool(fchecker)(int); // also OK, fchecker* == checker_v1 == checker_v2
Run Code Online (Sandbox Code Playgroud)
函数指针可以是函数参数的类型:
void process(int n, checker_v1 f, fchecker* g, bool(*h)(int pointless))
{
if (f(n)) { do_a(); }
if (g(n)) { do_b(); }
if (h(n)) { do_c(); }
}
Run Code Online (Sandbox Code Playgroud)
在最后一个示例中,请注意第四个参数类型的类型参数的process名称完全不相关.
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |