Chinaunix首页 | 论坛 | 博客
  • 博客访问: 504126
  • 博文数量: 119
  • 博客积分: 5054
  • 博客等级: 大校
  • 技术积分: 1305
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-03 13:13
文章分类

全部博文(119)

文章存档

2011年(4)

2010年(115)

我的朋友

分类: C/C++

2010-11-09 14:38:30

程序代码(片段):


typedef void (* api_msg_decode)(struct api_msg_msg *msg); /* api_msg_decode定义为指向函数的指针类型 */
static api_msg_decode decode[API_MSG_MAX] = { /* decode为api_msg_decode类型数组,其成员为相应的函数指针 */
    do_newconn,
    do_delconn,
    do_bind,
    do_connect,
    do_disconnect,
    do_listen,
    do_accept,
    do_send,
    do_recv,
    do_write,
    do_close,
};


static void
do_consol_print(struct api_msg_msg *msg)
{
  int i = 0;
  CONSOL_Printf("msg = %x\n",msg);
  for (; i < API_MSG_MAX; i++)
  {
      CONSOL_Printf("decode[%d] = %x\n", i, decode[i]);
  }
  CONSOL_Printf("do_newconn = %x\n"
                  "do_delconn = %x\n"
                  "do_bind = %x\n"
                  "do_connect = %x\n"
                  "do_disconnect = %x\n"
                  "do_listen = %x\n"
                  "do_accept = %x\n"
                  "do_send = %x\n"
                  "do_recv = %x\n"
                  "do_write = %x\n"
                  "do_close = %x\n",
                  do_newconn, do_delconn, do_bind, do_connect, do_disconnect,
                  do_listen, do_accept, do_send, do_recv, do_write, do_close);
  CONSOL_Printf("do_consol_print = %x\n", do_consol_print);
}


程序执行结果:

msg = 30008cb0

decode[0] = 200c1a

decode[1] = 300c1a

decode[2] = 400c1a

decode[3] = 500c1a

decode[4] = 600c1a

decode[5] = 700c1a

decode[6] = 800c1a

decode[7] = 900c1a

decode[8] = a00c1a

decode[9] = b00c1a

decode[10] = c00c1a

do_newconn = d3c0

do_delconn = d548

do_bind = d694

do_connect = d808

do_disconnect = d9c0

do_listen = da0c

do_accept = dab4

do_send = dacc

do_recv = db24

do_write = db64

do_close = dc40

do_consol_print = dc98


程序在ADS1.2中编译生成,在32位ARM平台上运行。

问题是:为什么decode[0]的值不等于do_newconn函数指针?

即不能通过decode[0](msg);来实现do_newconn(msg);函数调用。其中msg是struct api_msg_msg * 类型,do_newconn的函数原型是

static void do_newconn(struct api_msg_msg *msg);

其后的do_*函数类推。这些函数及数据结构在同一个文件中定义。

阅读(1389) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~