3211|9

34

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

探讨一下.C源文件中全局函数的一种命名规则 [复制链接]

先不讲理论,举个例子:
      一个液晶驱动Lcd.c文件中有函数WriteChar(char n),WriteString(char *str);为便于查找函数,通常需要加前缀Lcd_等。在这里提供一种结构体加函数指针的做法:
                       extern  struct Lcd={
                                          void (*WriteChar)(char n);
                                          void (*WriteString)(char *str);
                                         };
                       struct Lcd={WriteChar,WriteString};//初始化
                       Lcd.WriteChar(‘a’);//调用
                       Lcd.WriteString("good!");//调用
   如果你的编辑软件支持的话,只要打出Lcd.的时候,后面就会有下拉这个结构体成员名WriteChar,WriteString.
此帖出自stm32/stm8论坛

最新回复

是个好办法,但是我在keil里就显示不了结构体成员,不知道在哪里设置  详情 回复 发表于 2014-9-12 19:49
点赞 关注
 

回复
举报

1792

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
我还是更喜欢用LcdWriteChar,LcdWriteString这样的命名规则
对函数使用结构体体现不出什么优点吧
使用source Insight作编辑软件的时候,输入Lcd一样会有自动下拉选择
此帖出自stm32/stm8论坛
 
 

回复

977

帖子

4

TA的资源

纯净的硅(中级)

板凳
 
相对来说我更习惯不用结构体,不过楼主确实提供了一种不错的方法,赞一个!
我不喜欢使用结构体是因为结构体那段我确实没有信心驾驭住,每次不得已用结构体总是会点小问题
此帖出自stm32/stm8论坛
 
 

回复

1042

帖子

6

TA的资源

纯净的硅(中级)

4
 
回楼上,结构体又不难;
此帖出自stm32/stm8论坛
 
 
 

回复

4005

帖子

0

TA的资源

版主

5
 
回楼上,难是不难,不过在编译器上有时会出错.另外呢这种操作多一道手续,有点浪费
此帖出自stm32/stm8论坛
 
 
 

回复

578

帖子

0

TA的资源

纯净的硅(初级)

6
 
是个好办法,但是我在keil里就显示不了结构体成员,不知道在哪里设置
此帖出自stm32/stm8论坛

点评

source Insight  详情 回复 发表于 2014-9-13 08:12
 
个人签名刻苦学习,共同进步
 
 

回复

34

帖子

1

TA的资源

一粒金砂(中级)

7
 
    如果仅做到这里,确实和原来的命名没有区别,但如果是对整个系统进行结构体封装的话就不同了。
此帖出自stm32/stm8论坛
 
 
 

回复

34

帖子

1

TA的资源

一粒金砂(中级)

8
 
假设Lcd为系统的一个Device,除了系统外还有App类的函数,为了以示区分将总共分为System.和App.
                struct System={
                                       struct Device={
                                                            struct Lcd={
                                                                       void (*WriteChar)(char n);
                                                                       void (*WriteString)(char *str);
                                                                            };
                                                            struct ~~~~//更多的Device
                                                           };
                                         struct ·~~~~~~//更多的和系统下的关键组件
                                         void (*fun)();//系统下的函数
                                       };
    App.~~~和上面的写法一样,这里就不再赘述;System.是与系统硬件相关的,App.是业务逻辑与硬件无关。
    调用时System.Device.Lcd.WriteChar(),System.Device.Lcd.WriteString(),这样的好处在于你可以一眼看出这个函数它是一个与系统相关的设备,能驱动液晶,写个字符或者字符串。当然这种写法就如果系统很小那自然是没有用武之地的,反而显得累赘了很多;但当你的系统比较庞大,设备繁多时,它便能提供一种非常高效的函数调用和管理,而且整个系统也尽收System.的眼底,整体结构也变得清晰起来。
此帖出自stm32/stm8论坛
 
 
 

回复

34

帖子

1

TA的资源

一粒金砂(中级)

9
 
迈尔风随 发表于 2014-9-12 19:49
是个好办法,但是我在keil里就显示不了结构体成员,不知道在哪里设置

source Insight
此帖出自stm32/stm8论坛
 
 
 

回复

34

帖子

1

TA的资源

一粒金砂(中级)

10
 
在此我提一个问题,在运行的过程中会有安全风险吗,调用的速度会影响多少?还请高手指教一二!!!!
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表