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专家编程》第三章——分析C语言的声明
前面一章我们已经说过C语言存在的一些问题和它晦涩的地方,让我们对这门神奇的语言有了更深的了解.现在这一章则集中精力来讨论C语言的声明,分为三块,首先是说明C语言声明晦涩难懂的原因和声明是如何形成的,其 ...
- signal函数原型解读
今天复习信号,被函数指针和signal函数的原型绕住了,看了几篇博客,这里记录一下. 以下内容摘自signal() 函数详解,想要理解signal的原型,要先理解signal函数的返回值是一个函数指针 ...
- C专家编程 精编之一
C专家编程 精编之一 第一章~第三章 C的复杂之处 在于它的指针 ,但是比其指针更为复杂的是它的声明 !!! 你能看懂它们的意思 吗? apple=sizeof(int)*p ; ap ...
- C专家编程-读书笔记(书本顺序)
C语言设计哲学: 一切工作程序员自己负责. 语言中的所有特性都不需要隐式的运行时支持. 程序员所做的都是对的. 程序员应该知道自己在干什么,并保证自己的所作所为是正确的. ====== ...
- 《C专家编程》学习笔记
Chapter 1 char *cp; const char *ccp; ccp = cp; ccp是有指向有const 限定符的char 的指针,cp是指向没有限定符修饰的指针:左操作数具有右操作数 ...
- 《C专家编程》勘误表
<C专家编程>勘误表 说明:(1)本勘误由译者收集和维护.本勘误中行号计数方法:标题行和代码行都包含在内. (2)本勘误内容已经在本书第2次印刷中全部订正. ...
- 第六章_信号 : signal函数--信号
signal函数–信号 常见的信号类型 signal信号机制是属于计算机异常处理机制中的一种. signal信号属于一种异步处理异常的机制之一. 类似于我们平常在命令行上对于死循环的程序,按下ctrl ...
- signal函数的简单用法
1.函数原型理解 void (*signal(int sig,void(*func)(int)))(int); 指定使用sig指定的信号编号处理信号的方法. signal函数的返回值是函数指针. 比如 ...
- 《C专家编程》读书笔记3
第三章 分析C语言的声明 3.1 只有编译器才会喜欢的语法 char (*j) [20];/*j是一个指向数组的指针,数组内有20个char元素*/ j = (char (*)[20]) mal ...
最新文章
- morlet包络检波matlab,布里渊光纤传感系统中的信号处理的研究
- 【css】行高的计算
- 算法训练 K好数(dp+动态规划)
- 《剑指offer》题目说明
- 云计算机教室怎么布线,云和县实验小学计算机教室综合布线及计算机安装预算方案.doc...
- Linux Crontab 定时任务 及 Ubuntu 中cron指令使用
- 荷兰研制出世界最小U盘:长度不到2厘米
- 用jmap和jps查看对象数量
- [.NET开发] NPOI导出
- 中原证券同花顺个股期权全真模拟交易客户端
- IDEA格式化HTML页面
- 【软件需求工程】北理的恶龙们——软件需求规格说明
- Silvaco TCAD安装包相关问题
- 【Python讲义】WEEK 4
- 【财富空间】像先知一样思考,如拳手般战斗
- 网络攻防技术(摆烂一天)
- 技术角度解读《庆余年》,深度挖掘小说语料 -01
- python用*号输出字母c的图案_第1.6题:使用Python生成字母验证码图片
- 【Vue.JS】纯 Vue.js 制作甘特图
- Java打印实心菱形和空心菱形
热门文章
- Jquery EasyUI datagrid数据库分页
- 图---Dijstra
- FTP 服务器Serv-U:Permission denied解决
- php basic publish,RabbitMQ入门(PHP语言描述)
- SwiftUI之深入解析高级动画的路径Paths
- 计算机网络的拓扑结构主要取决于它的( )
- unable to access ‘https://github.com/***.git‘: OpenSSL SSL_read: Connection was reset, errno 10054
- 四篇关于恶意软件对抗方面的paper要点
- 数学 —— 巧用进制
- 【Linux】一步一步学Linux——ssh命令(176)