16
2018
09

分析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!


微信扫码关注

更新实时通知

« 上一篇 下一篇 »

评论列表:

1.xialibing  2018-09-16 23:33:05 回复该评论
这个笔试经常碰到,可以看看
1.访客  2018-09-17 13:12:01 回复该评论
看不懂,,,
1.访客  2018-09-17 14:53:38 回复该评论
你是谁

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。