Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15238
  • 博文数量: 14
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-11 16:26
文章分类
文章存档

2015年(14)

我的朋友

分类: LINUX

2015-01-11 23:32:49

原文地址:signal函数的定义 作者:2195113

C语言中的抽象函数定义也就是使用了函数指针,这里用signal函数解释一下抽象函数定义的含义和规则。

signal函数定义为:
void (*signal(int, void (*func)(int)))(int);
 
1. signal函数原型说明此函数需要两个参数,
   返回一个函数指针,而这个指针指向的函数无返回值(void)。

   第一个参数signo是一个整数,
   第二个参数是函数指针,它所指向的函数需要一个整型参数,无返回值。

signal的返回值是一个函数地址,该函数有一个整型参数(即最后的(int))。

用自然语言来描述也就是要向信号处理程序(func) 传送一个整型参数,无返回值。
当调用signal设置信号处理程序时,第二个参数是指向该函数(也就是信号 处理程序)的指针。
signal的返回值则是指向之前的信号处理程序的指针。
 
关于signal函数最后的(int),其实简单的说就是因为signal返回了一个函数指针,这个函数指针有一个(int)型参数(即void (*func)(int)中的int),这两个值应该是保持一致的。
如果signal函数不是返回的函数指针,那么我们的抽象函数可以定义为如下形式:
int ( *test)(....)
这样的形式。
或者如果指向的函数没有参数(即void),我们也可以写为:
int *(* test)(void),这样的形式。
 
利用函数的抽象定义可以创建出灵活的代码,也可方便的进行OO模拟,可以在struct中定义抽象函数,再在实现时将其设置为static类型的函数即可达到模拟class的效果,多加实践就能编写出灵活的代码。
阅读(827) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:syslog函数详解

给主人留下些什么吧!~~