C专家编程—分析signal函数的原型声明{void (*signal(int sig,void (*func)(int)))(int)}(2)
在ANSI標準中,signal()的聲明如下:
???? void (*signal(int sig,void (*func)(int)))(int)
signal是一個函數,它返回一個函數指針,后者所指向的函數(signal的返回值)接受一個int參數并返回void。signal函數有兩個參數,一個是sig(為int類型),另一個是func(為void(*)(int)類型)。
??? void (*func)(int)是一個函數指針,所指向的函數接受一個int參數,返回值是void。
???? 下面用typedef進行簡化:
????? typedef void(*ptr_to_func)(int);
????? ptr_to_func signal(int,ptr_to_func);
網上的一個例子:
#include <stdio.h>
enum { RED, GREEN, BLUE };
void OutputSignal(int sig)
{
??? printf("The signal you /'ve input is: ");
??? switch(sig)
??? {
??? case RED:
??????? puts("RED!");
??????? break;
??? case GREEN:
??????? puts("GREEN!");
??????? break;
??? case BLUE:
??????? puts("BLUE!");
??????? break;
??? }
}
void ( *signal( int sig, void (*func)(int) ) ) (int)
{
??? puts("Hello, world!");
??? func(sig);
??? return func;
}
int main(void)
{
??? (*signal(GREEN, &OutputSignal))(RED);
??? return 0;
}
Output:
???? Hello, world!
???? The signal you 've input is: GREEN!
???? The signal you 've input is: RED!
???
???
?
總結
以上是生活随笔為你收集整理的C专家编程—分析signal函数的原型声明{void (*signal(int sig,void (*func)(int)))(int)}(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C专家编程—使用unsigned int
- 下一篇: 很长很真实!但会对你有所帮助的(关于职业