在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)相关推荐

  1. 《C专家编程》第三章——分析C语言的声明

    前面一章我们已经说过C语言存在的一些问题和它晦涩的地方,让我们对这门神奇的语言有了更深的了解.现在这一章则集中精力来讨论C语言的声明,分为三块,首先是说明C语言声明晦涩难懂的原因和声明是如何形成的,其 ...

  2. signal函数原型解读

    今天复习信号,被函数指针和signal函数的原型绕住了,看了几篇博客,这里记录一下. 以下内容摘自signal() 函数详解,想要理解signal的原型,要先理解signal函数的返回值是一个函数指针 ...

  3. C专家编程 精编之一

    C专家编程  精编之一     第一章~第三章 C的复杂之处 在于它的指针 ,但是比其指针更为复杂的是它的声明 !!! 你能看懂它们的意思 吗? apple=sizeof(int)*p  ;   ap ...

  4. C专家编程-读书笔记(书本顺序)

    C语言设计哲学:   一切工作程序员自己负责.   语言中的所有特性都不需要隐式的运行时支持.   程序员所做的都是对的.   程序员应该知道自己在干什么,并保证自己的所作所为是正确的. ====== ...

  5. 《C专家编程》学习笔记

    Chapter 1 char *cp; const char *ccp; ccp = cp; ccp是有指向有const 限定符的char 的指针,cp是指向没有限定符修饰的指针:左操作数具有右操作数 ...

  6. 《C专家编程》勘误表

    <C专家编程>勘误表 说明:(1)本勘误由译者收集和维护.本勘误中行号计数方法:标题行和代码行都包含在内.           (2)本勘误内容已经在本书第2次印刷中全部订正.       ...

  7. 第六章_信号 : signal函数--信号

    signal函数–信号 常见的信号类型 signal信号机制是属于计算机异常处理机制中的一种. signal信号属于一种异步处理异常的机制之一. 类似于我们平常在命令行上对于死循环的程序,按下ctrl ...

  8. signal函数的简单用法

    1.函数原型理解 void (*signal(int sig,void(*func)(int)))(int); 指定使用sig指定的信号编号处理信号的方法. signal函数的返回值是函数指针. 比如 ...

  9. 《C专家编程》读书笔记3

    第三章 分析C语言的声明 3.1    只有编译器才会喜欢的语法 char (*j) [20];/*j是一个指向数组的指针,数组内有20个char元素*/ j = (char (*)[20]) mal ...

最新文章

  1. morlet包络检波matlab,布里渊光纤传感系统中的信号处理的研究
  2. 【css】行高的计算
  3. 算法训练 K好数(dp+动态规划)
  4. 《剑指offer》题目说明
  5. 云计算机教室怎么布线,云和县实验小学计算机教室综合布线及计算机安装预算方案.doc...
  6. Linux Crontab 定时任务 及 Ubuntu 中cron指令使用
  7. 荷兰研制出世界最小U盘:长度不到2厘米
  8. 用jmap和jps查看对象数量
  9. [.NET开发] NPOI导出
  10. 中原证券同花顺个股期权全真模拟交易客户端
  11. IDEA格式化HTML页面
  12. 【软件需求工程】北理的恶龙们——软件需求规格说明
  13. Silvaco TCAD安装包相关问题
  14. 【Python讲义】WEEK 4
  15. 【财富空间】像先知一样思考,如拳手般战斗
  16. 网络攻防技术(摆烂一天)
  17. 技术角度解读《庆余年》,深度挖掘小说语料 -01
  18. python用*号输出字母c的图案_第1.6题:使用Python生成字母验证码图片
  19. 【Vue.JS】纯 Vue.js 制作甘特图
  20. Java打印实心菱形和空心菱形

热门文章

  1. Jquery EasyUI datagrid数据库分页
  2. 图---Dijstra
  3. FTP 服务器Serv-U:Permission denied解决
  4. php basic publish,RabbitMQ入门(PHP语言描述)
  5. SwiftUI之深入解析高级动画的路径Paths
  6. 计算机网络的拓扑结构主要取决于它的( )
  7. unable to access ‘https://github.com/***.git‘: OpenSSL SSL_read: Connection was reset, errno 10054
  8. 四篇关于恶意软件对抗方面的paper要点
  9. 数学 —— 巧用进制
  10. 【Linux】一步一步学Linux——ssh命令(176)