1949啦网--小小 痛苦,是因为能力和欲望不匹配造成的

分析signal函数的原型声明void (*signal(int sig,void (*func)(int)))(int)

在ANSI标准中,signal()的声明如下:

     void (*signal(int sig,void (*func)(int)))(int)





signal是一个函数:

     1.它返回一个函数指针void (*p) (int)



     2.它的两个参数是一个是int和一个函数指针void (*p) (int)





下面用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!



微信扫码关注

更新实时通知

作者:xialibing 分类:编程小记 浏览: