结构体函数指针的初始化
2012-04-18 14:23
295 查看
最近一段时间以来,都在想着怎样将程序分层进行模块化,减小程序之间的耦合性。在自学C++一段时间以后,于是有模仿C++的想法,
将相同或者类似的函数都放在同一模块内,能后通过函数指针的方式调用起模块内部的函数。但是在定义函数指针之后,需要对起模块内部
函数指针进行初始化工作方能调用,就好比windows里面的窗口调用一样,在使用之前,先要对窗口类进行注册一个道理。但是又想怎样可
以将函数指针进行常量化初始化,从而保证能像普通函数那样一样调用。如果使用这种方法,必须手工去初始化函数指针,这样会容易产生
人为错误。
在一次看网页的时候,偶然之间在黑金开发版搜索到的一个例子程序,看到了以下类似的函数指针初始化工作。
可以将此模块放在单独一个模块内。这样在其他程序就可以使用module.initial()来对 module_initial来进行调用了。同理,
模块内的其他函数也可以通过函数指针的方式来实现调用,这样就提高了程序的内聚性,但是此程序在keil中编译的时候,
需要在C/C++编译选项里添加--C99才能编译通过,否则会报错。使用这种方法将会消耗一定的内存资源。调用module.intial()的反汇编为
其实质上是编译器帮程序员完成了初始化工作,汇编中所指向的函数地址存储在RAM中。
但是有没有更好的方式可以节省RAM的方式来完成直接调用,不知道哪位大虾有没有更好的方法,还请各位指教。
将相同或者类似的函数都放在同一模块内,能后通过函数指针的方式调用起模块内部的函数。但是在定义函数指针之后,需要对起模块内部
函数指针进行初始化工作方能调用,就好比windows里面的窗口调用一样,在使用之前,先要对窗口类进行注册一个道理。但是又想怎样可
以将函数指针进行常量化初始化,从而保证能像普通函数那样一样调用。如果使用这种方法,必须手工去初始化函数指针,这样会容易产生
人为错误。
在一次看网页的时候,偶然之间在黑金开发版搜索到的一个例子程序,看到了以下类似的函数指针初始化工作。
void module_initial(void); typedef struct { void (* initial) (void); }MODULE_T; MODULE_T module = { .initial = module_initial }; void module_initial(void) { //............ }
可以将此模块放在单独一个模块内。这样在其他程序就可以使用module.initial()来对 module_initial来进行调用了。同理,
模块内的其他函数也可以通过函数指针的方式来实现调用,这样就提高了程序的内聚性,但是此程序在keil中编译的时候,
需要在C/C++编译选项里添加--C99才能编译通过,否则会报错。使用这种方法将会消耗一定的内存资源。调用module.intial()的反汇编为
;;;65 module.initial(); 00003c 4914 LDR r1,|L1.144| 00003e 6808 LDR r0,[r1,#0] ; module 000040 4780 BLX r0
其实质上是编译器帮程序员完成了初始化工作,汇编中所指向的函数地址存储在RAM中。
但是有没有更好的方式可以节省RAM的方式来完成直接调用,不知道哪位大虾有没有更好的方法,还请各位指教。
相关文章推荐
- 结构体初始化及结构体指针.结构体数组.结构体函数的调用赋值等
- 如何正确使用指针(指针作为输出型参数)与结构体指针作为函数参数
- 函数指针 结构体struct
- Delphi 的内存操作函数(3): 给结构体指针分配内存
- Linux内核中常见的结构体对象中的函数指针赋值操作
- [编程] C语言结构体指针作为函数参数
- 【嵌入式系统学习记录】基于简易通讯录对指针、结构体、函数的使用体会
- 结构体指针初始化错误
- 结构体中指向函数的指针
- 条款 31: 千万不要返回局部对象的引用,也不要返回函数内部用 new 初始化的 指针的引用
- 结构体二级指针的初始化
- C/12个C语言面试题,涉及指针、进程、运算、结构体、函数、内存
- 有关结构体指针与函数传参返回值类型的六种方法
- C语言中,将结构体指针传入函数后,内存地址没变,内存数据发生变化
- 结构体指针的学习与总结&&函数指针与指针函数
- C语言技巧--在结构体中使用函数例子(定义一个指向函数的指针)
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析
- Delphi 的内存操作函数(3): 给结构体指针分配内存
- C语言结构体指针初始化!
- 结构体指针与结构体名做函数参数对比