打印

怎样解读这几行代码。

[复制链接]
1968|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lyf9908|  楼主 | 2011-1-3 21:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近看一个资深工程师写的代码,如下几行

1:  typedef void (*fptr)();    /* function pointer */
2: fptr IRQ_HandlerTable[19]; /* Interrupt Handler Table */
3: irqNum = inpw(AIC_ISNR);  /* read the interrupt source number */
4: (*IRQ_HandlerTable[irqNum])();

  这第一行这样作类型定义有什么作用?
   这最后一行到底在干啥?
  着实看不懂啊,请高手帮忙解析下,谢谢!

相关帖子

沙发
清风一士| | 2011-1-3 21:26 | 只看该作者
执行一个函数表中某一个元素(函数,原型即void (*fptr)();)

使用特权

评论回复
板凳
lyf9908|  楼主 | 2011-1-4 16:23 | 只看该作者
还是不大明白,原来搞硬件的,现在想搞软件,举步维艰啦,问题太多了。
   完整的如下:
   
  #define  inpw(port)         port
   #define AIC_ISNR    (VPint(APB_IO_BASE+0x2110)) /* Interrupt Source Number Register */
   uint32    irqNum;
1: typedef void (*fptr)();    /* function pointer */
2: fptr IRQ_HandlerTable[19]; /* Interrupt Handler Table */
3: irqNum = inpw(AIC_ISNR);  /* read the interrupt source number */
4: (*IRQ_HandlerTable[irqNum])();
  请高手帮忙解答下,谢谢!

使用特权

评论回复
地板
liang7143| | 2011-1-6 09:55 | 只看该作者
1、定义一个类型的别名,这个类型为 函数指针
和如下这样的定义其实是一样的
typedef unsigned char uint8
2、定义了一个 函数指针数组 这个数组里面包含了19个 无返回值 无参数的函数指针
4、调用对应的函数(假如irqNum为0,是调用IRQ_HandlerTable[0]中对应的函数)

使用特权

评论回复
5
liang7143| | 2011-1-6 09:57 | 只看该作者
其实就是 一个 转移表的应用

使用特权

评论回复
6
e掾木| | 2011-1-6 20:33 | 只看该作者
这样的设计方式确实让人如坠五云中!没有5年的C设计功底,建议绕过。
喜欢这样设计的高手无外乎是以下几种情况:
1、做项目外包;2、对项目组不满,做完项目就想走人;3、商业代码。

使用特权

评论回复
7
mohanwei| | 2011-1-6 20:42 | 只看该作者
也没那么夸张,启动代码、RTOS、菜单、Shell、算法里很常见……因为不这样用程序没法写:lol
如果不信邪,也可以自己找个例子,然后尝试做一下,呵呵

使用特权

评论回复
8
lyf9908|  楼主 | 2011-1-6 20:59 | 只看该作者
多谢谢,学了!
   总结下:
    1:定义fptr为一个指针变量,指向一个没有返回值的函数。
    2:定义一个指针数组,每一个元系都为一个指向没有返回值的函数的指针变量。
    3:这条干嘛不直接写成:irqNum = AIC_ISNR? 写成哪样有什么好处?
    4:调用对应的函数。

使用特权

评论回复
9
清风一士| | 2011-1-6 22:48 | 只看该作者
楼主C功需再练

使用特权

评论回复
10
xixihaha0| | 2011-1-7 17:03 | 只看该作者
这个很简单吧,c功底,还没涉及到复杂的算法,哈哈,

使用特权

评论回复
11
lyf9908|  楼主 | 2011-1-8 19:01 | 只看该作者
以前搞硬件的,只写过单片机程序,现在都30岁了,才想到要把软件搞深点,实时操作系统都要干,不然没有竞争力呀。‘
   雄关漫道真如铁!

使用特权

评论回复
12
rr_tm_520| | 2011-1-8 23:55 | 只看该作者
呵呵,主要对是C的指针要了解透彻

使用特权

评论回复
13
ASCLL| | 2011-5-9 13:33 | 只看该作者
LZ加群30803350讨论

使用特权

评论回复
14
生化分析仪| | 2011-5-16 11:42 | 只看该作者
绝对是需要人来搞的

使用特权

评论回复
15
wxwangwei| | 2011-5-18 13:22 | 只看该作者
领教了

使用特权

评论回复
16
a2b3c4ddd| | 2011-5-23 23:24 | 只看该作者
这是C/C++的函数指针 及类型定义的综合使用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

133

主题

176

帖子

0

粉丝