怎样解读这几行代码。
最近看一个资深工程师写的代码,如下几行1:typedef void (*fptr)(); /* function pointer */
2: fptr IRQ_HandlerTable; /* Interrupt Handler Table */
3: irqNum = inpw(AIC_ISNR);/* read the interrupt source number */
4: (*IRQ_HandlerTable)();
这第一行这样作类型定义有什么作用?
这最后一行到底在干啥?
着实看不懂啊,请高手帮忙解析下,谢谢! 执行一个函数表中某一个元素(函数,原型即void (*fptr)();) 还是不大明白,原来搞硬件的,现在想搞软件,举步维艰啦,问题太多了。
完整的如下:
#defineinpw(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; /* Interrupt Handler Table */
3: irqNum = inpw(AIC_ISNR);/* read the interrupt source number */
4: (*IRQ_HandlerTable)();
请高手帮忙解答下,谢谢! 1、定义一个类型的别名,这个类型为 函数指针
和如下这样的定义其实是一样的
typedef unsigned char uint8
2、定义了一个 函数指针数组 这个数组里面包含了19个 无返回值 无参数的函数指针
4、调用对应的函数(假如irqNum为0,是调用IRQ_HandlerTable中对应的函数) 其实就是 一个 转移表的应用 这样的设计方式确实让人如坠五云中!没有5年的C设计功底,建议绕过。
喜欢这样设计的高手无外乎是以下几种情况:
1、做项目外包;2、对项目组不满,做完项目就想走人;3、商业代码。 也没那么夸张,启动代码、RTOS、菜单、Shell、算法里很常见……因为不这样用程序没法写:lol
如果不信邪,也可以自己找个例子,然后尝试做一下,呵呵 多谢谢,学了!
总结下:
1:定义fptr为一个指针变量,指向一个没有返回值的函数。
2:定义一个指针数组,每一个元系都为一个指向没有返回值的函数的指针变量。
3:这条干嘛不直接写成:irqNum = AIC_ISNR? 写成哪样有什么好处?
4:调用对应的函数。 楼主C功需再练 这个很简单吧,c功底,还没涉及到复杂的算法,哈哈, 以前搞硬件的,只写过单片机程序,现在都30岁了,才想到要把软件搞深点,实时操作系统都要干,不然没有竞争力呀。‘
雄关漫道真如铁! 呵呵,主要对是C的指针要了解透彻 LZ加群30803350讨论 绝对是需要人来搞的 领教了 这是C/C++的函数指针 及类型定义的综合使用
页:
[1]