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) |