<signal.h> 中有一个复杂的函数声明。很叫人费解。

void (*signal(int sig, void (*handler)(int)))(int);

我们按照向右看向左看的黄金法则来分析这个函数声明。如果你不明白我在讲什么,请看 读懂C复杂声明的黄金法则。

首先这个声明的主体是signal,这个应该没有争议。

向右看,(int sig, void (*handler)(int)),括号和参数,说明signal是一个函数。
第一个整形参数sig不用多讲,第二个参数比较复杂 void (*handler)(int),这是一个函数指针,它指向的函数接收一个整形参数,没有返回值。

向左看,发现一个*,说明signal函数返回的是一个指针。
向右看,向左看,是一对(),这怎么理解。(*)表明是一个函数指针,就是说signal函数的返回值是一个函数指针。

再向右看,(int),说明signal返回的函数指针指向的函数接受一个整形参数。
向左看,是void,说明signal返回的函数指针指向的函数没有返回值。

综合来看,这个声明,是一个名叫signal的函数声明,其主体是 signal(int, void (*)(int)),其返回值是void (*)(int)

分成这样写就清楚多了。

typedef void (*callback)(int);
callback signal(int sig, callback handler);

signal函数的作用是为某个信号设置新的处理函数(指针),如果成功,将返回之前的处理函数(指针)。

你可以将它返回的函数指针保存下来,方便以后重置该信号的处理函数。

感谢SegmentFault上朋友的答疑: http://segmentfault.com/q/1010000002626356

C标准库函数中复杂的函数声明相关推荐

  1. sql 精读(二) 标准 SQL 中的编号函数

    标准 SQL 中的编号函数 以下部分介绍了 BigQuery 支持的编号函数.编号函数是分析函数的一部分. 如需了解分析函数的工作原理,请参阅分析函数概念.如需了解编号函数的工作原理,请参阅编号函数概 ...

  2. php spl函数,PHP SPL标准库中的常用函数介绍

    这篇文章主要介绍了PHP SPL标准库中的常用函数介绍,本文着重讲解了spl_autoload_extensions().spl_autoload_register().spl_autoload()三 ...

  3. C++标准库中的数学函数

    C++标准库中的数学函数. 这是一篇我转载的文章,里面有关于数学相关的函数讲解的很详细,供以后自己学习. http://blog.sina.com.cn/s/blog_149e9d2ec0102wxq ...

  4. 课后习题5.13 编写一程序,将两个字符串连接起来,结果取代第一个字符串。 (1)用字符数组,不用stract函数(即自己写一个具有stract函数功能的函数); (2)用标准库中的stract函数;

    课后习题5.13 编写一程序,将两个字符串连接起来,结果取代第一个字符串. (1)用字符数组,不用stract函数(即自己写一个具有stract函数功能的函数): (2)用标准库中的stract函数: ...

  5. 山寨c 标准库中的getline 函数

    2019独角兽企业重金招聘Python工程师标准>>> 要山寨一个函数,只要看两点 原版函数的形参. 原函数的返回值. 下面是函数原型. ssize_t getline(char * ...

  6. sql 精读(三) 标准 SQL 中的编号函数示例

    编号函数概念 编号函数会根据每一行在指定窗口中的位置向该行分配整数值. RANK().DENSE_RANK() 和 ROW_NUMBER() 示例: WITH Numbers AS(SELECT 1 ...

  7. C++标准库函数begin和end函数

    主要的目的 为了让指针更加简单.安全,引入了begin和end函数,这两个函数和容器中两个同名的成员函数类似.但是由于数组毕竟不是类类型,因此这两个函数不是成员函数. 正确的使用形式就是将数组作为他们 ...

  8. C语言库函数中的Strcat函数

    一.Strcat函数的参数 Strcat函数所引用的头文件是<string.h> char*strcat(char* strDestination, const char* strSour ...

  9. C标准库函数mkfifo()(进程相关函数)

    前言 如果,想要深入的学习C标准库函数中的mkfifo函数,还是需要去自己阅读Linux系统中的帮助文档. 具体输入命令: man 3 mkfifo 即可查阅到完整的资料信息. mkfifo函数 mk ...

  10. [原创]Enterprise Architecture V7.5 C++代码生成时,头文件中函数声明没有注释,CPP中函数定义却有注释。...

    这几天一直在用Enterprise Architecture来抽象项目中要用到的一些数据结构和类,然后都做得差不多了之后发现,生成代码的时候.h文件中类成员函数部分没有注释,但是.cpp文件中的函数定 ...

最新文章

  1. 2021年大数据常用语言Scala(十三):基础语法学习 函数 重点掌握
  2. 15000 字的 SQL 语句大全
  3. python与编码方式
  4. ActiveReports 6.0 - 高效开发UI
  5. 用libevent实现简易的telnet
  6. 【Android】动态更新Icon
  7. Silverlight与Flash的技术比较(图)
  8. 极速理解设计模式系列:4.原型模式(Prototype Pattern)
  9. mysql 目录更改 php_树莓派搭建LAMP,然后更改根目录
  10. 029 RDD Join相关API,以及程序
  11. 2019118_四个化学数据分析(3)
  12. Matlab图像处理系列3———空间域锐化滤波器
  13. Debian下使用Doxygen生成定制样式的开发文档
  14. 调查了23款加速器,只剩这几款可以白嫖了!
  15. 5 款非常好用的AI在线图片处理工具
  16. python tkinter怎么读_Python初学 Tkinter
  17. java射击_java射击类游戏
  18. 考研数据结构判断题整合
  19. android 设置头像以及裁剪功能
  20. Blander入门笔记(1) 界面和视窗

热门文章

  1. boxplot函数--Matplotlib
  2. Mysql 8.0 | #08004Client does not support authentication protocol requested by server
  3. 最小生成树模板 加 例题分析 (最小生成树类型汇总)
  4. mfc背景图片覆盖控件问题
  5. 《用户至上:用户研究方法与实践》道德与法律问题
  6. 【Python学习笔记】集合set
  7. 当你想对常用网站定制属于自己的颜色,然而又没人理你怎么办
  8. Android微信分享功能实例+demo
  9. COM 组件设计与应用(二)——GUID 和 接口
  10. SQL Server 2005的Resource数据库