|
蓝森林 http://www.lslnet.com 2006年6月6日 10:18
#define A (B)& C 这种用法是什么意思?
这个宏定义是什么意思?#define MIO_RAW_READ (mio_read_func)&_mio_raw_read?
其中_mio_raw_read是一个函数名:
#define MIO_READ_FUNC pth_read //这个pth_read是pth线程库函数
ssize_t _mio_raw_read(mio m, void *buf, size_t count)
{
return MIO_READ_FUNC(m->fd, buf, count);
}
mio_read_func是一个指向函数的指针变量:
typedef ssize_t (*mio_read_func) (mio m, void* buf, size_t count);
把一个指针变量和一个函数地址进行与操作?什么意思? |
强制类型转换。
typedef ssize_t (*mio_read_func) (mio m, void* buf, size_t count);
定义了一个函数指针类型mio_read_func,该指针类型所指向的函数接受mio m, void* buf, size_t count参数列表并返回一个ssize_t类型的变量
然后(mio_read_func)&_mio_raw_read进行准确的类型转换,
执行函数调用。
对一个函数而言,函数名实际上是函数入口地址的符号表示,
假定有一个函数
[code]
int max(int a ,b)
{
return (a > b : a : b);
}
[/code]
max的值和&max的值是一样的。
MIO_READ_FUNC(m->fd, buf, count); ==>
((mio_read_func)&_mio_raw_read)(m->fd, buf, count) ==>
(mio_read_func)&_mio_raw_read(m->fd, buf, count)
进行的就是函数名取地址转换成函数指针类型然后再调用函数。
是有一些别扭。 |
回复 2楼 renstone921 的帖子
good!!! |
| |