蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 |
 您目前的位置:首页 > 自由软件 > 技术交流 > 应用编程


    

蓝森林 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!!!



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com