CN105677341A - 一种解决软件分支语句过多的方法 - Google Patents
一种解决软件分支语句过多的方法 Download PDFInfo
- Publication number
- CN105677341A CN105677341A CN201610000461.8A CN201610000461A CN105677341A CN 105677341 A CN105677341 A CN 105677341A CN 201610000461 A CN201610000461 A CN 201610000461A CN 105677341 A CN105677341 A CN 105677341A
- Authority
- CN
- China
- Prior art keywords
- function
- dynamic base
- software
- branch
- pointer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/22—Procedural
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种解决软件分支语句过多的方法,包括:动态库建立步骤;函数指针建立步骤;函数指针指向动态库步骤。本发明使动态库和函数指针数据相结合,以解决上述软件工程中分支语句较多时问题,以简化软件结构,提高软件设计效率,提高软件的可读性、可维护性和可扩展性。
Description
技术领域
本发明属于软件设计技术领域,尤其涉及一种解决软件分支语句过多的方法。
背景技术
架构设计是软件设计中重要的一个步骤,优秀的架构设计可以保证整个软件***的稳定性、可扩展性、可维护性等。
在软件***特别是通信***的设计中,经常会出现以下的处理逻辑:1通信数据帧接收->2对数据进行解析->3根据不同的命令调用不同的处理函数->4发送处理结果。
在这种类型的***中,最大的代码工作在第三步,即根据不同的命令调用不同的处理函数,通常的设计会采用switch分支函数或函数指针数组进行处理,如果采用switch分支语句进行处理,会造成主处理函数中包含较多的分支,这样会在功能扩展时需要对主处理函数进行修改增加分支内容,维护困难而且不利于阅读,对软件的后期维护也造成不便。如果单纯的采用函数指针数据进行处理,可以解决主函数分支过多的问题,但是在功能扩展时,同样需要对主处理功能模块进行修改,维护困难。
在这种情况下,需要一种简单有效的方法使软件***更加可靠、更加易于维护和易于扩展。
发明内容
为实现上述目的,本发明提供了一种解决软件分支语句过多的方法,包括:
动态库建立步骤;
函数指针建立步骤;
函数指针指向动态库步骤;
其中,动态库建立具体为如下步骤:
步骤一:建立动态库,将每个分支作为功能函数FUNCX()编译到动态库中,其中X=0,1,…,N;N的值为分支数;
步骤二:建立具有N个元素的功能函数数组,将每个分支对应的功能函数和功能函数数组中的每个数据元素一一对应;
步骤三:建立统一处理函数,并将其编译到动态库中;
步骤四:在统一处理函数中根据命令直接执行数组对应元素对应的功能函数,完成相应的分支功能;
其中,函数指针指向动态库步骤具体为:
步骤一:初始化函数指针,打开动态库;
步骤二:取得统一处理函数的实际地址;
步骤三:函数指针指向动态库统一处理函数。
进一步的,动态库建立步骤和函数指针建立步骤同时进行。
进一步的,先进行函数指针建立步骤,再进行动态库建立步骤。
进一步的,通过dlopen打开动态库。
进一步的,通过dlsym取得处理函数的实际地址。
本发明具有如下优点:
1.简化程序结构,将庞大的分支简化为单个的功能函数,避免了一个函数行数过多的问题。
2.具体处理功能编译为动态库,增强了程序的可扩展性,如需扩展功能,只需要更新动态库即可。
3.结构简单,可以根据每个功能进行分工合作,在软件设计和实现中安排不同的人员分别对动态库和主函数两个部分进行开发设计,所有的数据处理都在动态库中完成,在统一处理函数中只需要实现函数指针、指针的初始化以及主处理流程即可。提高软件设计效率。
4.提高了软件的可读性、可维护性,增强了软件的可扩展性。
附图说明
图1是本发明工作流程图。
具体实施方式
本发明的设计构思为:动态库和函数指针数据相结合,以解决上述软件工程中分支语句较多时问题,以简化软件结构,提高软件设计效率,提高软件的可读性、可维护性和可扩展性。
本发明可分为三个大的步骤:
a.动态库建立步骤。
b.函数指针建立步骤。
c.函数指针指向动态库步骤。
下面结合图1对各个步骤进行详细说明。其中,dll为动态库,pcmd为函数指针,Mngcmd为统一处理函数,SCMD为功能函数数组。
动态库建立步骤具体包括如下步骤:
步骤一:建立动态库dll,将每个分支作为功能函数FUNCX()编译到动态库中,其中X=0,1,…,N;N的值为分支数;
步骤二:建立具有N个元素的功能函数数组SCMD,将每个分支对应的功能函数和功能函数数组中的每个数据元素SCMD[n](n=0,1,…,N)一一对应;
步骤三:建立统一处理函数mngcmd,并将其编译到动态库dll中;
步骤四:在mngcmd中根据命令直接执行数组对应元素对应的功能函数,完成相应的分支功能。如命令n直接执行SCMD[n],进而利用FUNCn()可完成相应的分支功能。
函数指针指向动态库步骤具体包括如下步骤:
步骤一:初始化函数指针pcmd,通过dlopen打开动态库dll;
步骤二:通过dlsym取得统一处理函数mngcmd的实际地址;
步骤三:函数指针pcmd指向统一处理函数mngcmd。
本发明统一处理函数mngcmd中只需要实现函数指针的初始化以及主要的接收和发送过程,在程序运行过程中自动跳转到动态库中的具体实现,在动态库中根据函数数组中的具体功能函数进行数据处理。
应当理解,动态库建立步骤和建立函数指针pcmd建立步骤不分先后,可以同时进行或者任意先后顺序。
本发明具有如下优点:
1.简化程序结构,将庞大的分支简化为单个的功能函数,避免了一个函数行数过多的问题。
2.具体处理功能编译为动态库,增强了程序的可扩展性,如需扩展功能,只需要更新动态库即可。
3.结构简单,可以根据每个功能进行分工合作,在软件设计和实现中安排不同的人员分别对动态库和主函数两个部分进行开发设计,所有的数据处理都在动态库中完成,在主函数中只需要实现函数指针、指针的初始化以及主处理流程即可。提高软件设计效率。
4.提高了软件的可读性、可维护性,增强了软件的可扩展性。
Claims (5)
1.一种解决软件分支语句过多的方法,其特征在于,包括:
动态库建立步骤;
函数指针建立步骤;
函数指针指向动态库步骤;
其中,动态库建立具体为如下步骤:
步骤一:建立动态库,将每个分支作为功能函数FUNCX()编译到动态库中,其中X=0,1,…,N;N的值为分支数;
步骤二:建立具有N个元素的功能函数数组,将每个分支对应的功能函数和功能函数数组中的每个数据元素一一对应;
步骤三:建立统一处理函数,并将其编译到动态库中;
步骤四:在统一处理函数中根据命令直接执行数组对应元素对应的功能函数,完成相应的分支功能;
其中,函数指针指向动态库步骤具体为:
步骤一:初始化函数指针,打开动态库;
步骤二:取得统一处理函数的实际地址;
步骤三:函数指针指向统一处理函数。
2.如权利要求1所述的一种解决软件分支语句过多的方法,其特征在于,动态库建立步骤和函数指针建立步骤同时进行。
3.如权利要求1所述的一种解决软件分支语句过多的方法,其特征在于,先进行函数指针建立步骤,再进行动态库建立步骤。
4.如权利要求1所述的一种解决软件分支语句过多的方法,其特征在于,通过dlopen打开动态库。
5.如权利要求1或4所述的一种解决软件分支语句过多的方法,其特征在于,通过dlsym取得统一处理函数的实际地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610000461.8A CN105677341A (zh) | 2016-01-04 | 2016-01-04 | 一种解决软件分支语句过多的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610000461.8A CN105677341A (zh) | 2016-01-04 | 2016-01-04 | 一种解决软件分支语句过多的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105677341A true CN105677341A (zh) | 2016-06-15 |
Family
ID=56298669
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610000461.8A Pending CN105677341A (zh) | 2016-01-04 | 2016-01-04 | 一种解决软件分支语句过多的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105677341A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107608677A (zh) * | 2017-09-05 | 2018-01-19 | 腾讯科技(深圳)有限公司 | 一种编译处理方法、装置及电子设备 |
CN107870897A (zh) * | 2016-09-28 | 2018-04-03 | 小船出海教育科技(北京)有限公司 | 数据的处理方法和装置 |
CN114051053A (zh) * | 2021-11-16 | 2022-02-15 | 深圳依时货拉拉科技有限公司 | iOS推送消息处理方法、装置、计算机设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050028132A1 (en) * | 2003-07-31 | 2005-02-03 | Srinivasamurthy Venugopal K. | Application specific optimization of interpreters for embedded systems |
CN101165648A (zh) * | 2006-10-16 | 2008-04-23 | 中兴通讯股份有限公司 | 一种构造中间库的方法 |
WO2010049317A1 (fr) * | 2008-10-30 | 2010-05-06 | Caps Entreprise | Procédé de réalisation d'un appel d'une instance d'une fonction, dispositif, et programme d'ordinateur correspondant. |
CN102929682A (zh) * | 2012-12-06 | 2013-02-13 | 盛科网络(苏州)有限公司 | 自动扩展tcl语言的预处理方法和装置 |
-
2016
- 2016-01-04 CN CN201610000461.8A patent/CN105677341A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050028132A1 (en) * | 2003-07-31 | 2005-02-03 | Srinivasamurthy Venugopal K. | Application specific optimization of interpreters for embedded systems |
CN101165648A (zh) * | 2006-10-16 | 2008-04-23 | 中兴通讯股份有限公司 | 一种构造中间库的方法 |
WO2010049317A1 (fr) * | 2008-10-30 | 2010-05-06 | Caps Entreprise | Procédé de réalisation d'un appel d'une instance d'une fonction, dispositif, et programme d'ordinateur correspondant. |
CN102929682A (zh) * | 2012-12-06 | 2013-02-13 | 盛科网络(苏州)有限公司 | 自动扩展tcl语言的预处理方法和装置 |
Non-Patent Citations (2)
Title |
---|
HEIHAIER520: "MFC中加载动态库使用函数指针", 《HTTPS://BLOG.CSDN.NET/HEIHAIER520/ARTICLE/DETAILS/21945231》 * |
刘宏 等: "C语言中用指针指向函数的方法及其高级处理技巧的研究与应用", 《东北农业大学学报》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107870897A (zh) * | 2016-09-28 | 2018-04-03 | 小船出海教育科技(北京)有限公司 | 数据的处理方法和装置 |
CN107870897B (zh) * | 2016-09-28 | 2021-03-02 | 小船出海教育科技(北京)有限公司 | 数据的处理方法和装置 |
CN107608677A (zh) * | 2017-09-05 | 2018-01-19 | 腾讯科技(深圳)有限公司 | 一种编译处理方法、装置及电子设备 |
CN107608677B (zh) * | 2017-09-05 | 2020-11-03 | 腾讯科技(深圳)有限公司 | 一种编译处理方法、装置及电子设备 |
CN114051053A (zh) * | 2021-11-16 | 2022-02-15 | 深圳依时货拉拉科技有限公司 | iOS推送消息处理方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103473141A (zh) | 一种带外查看及修改bios设置选项的方法 | |
CN101789171B (zh) | 一种数据传送总线变换方法及*** | |
CN108009258B (zh) | 一种可在线配置的数据采集与分析平台 | |
CN105677341A (zh) | 一种解决软件分支语句过多的方法 | |
CN102023843B (zh) | 函数的调用方法、装置及智能卡 | |
CN103218337A (zh) | 基于wishbone总线实现主与主、从与从通信的片上***和方法 | |
CN102736594B (zh) | 一种智能配电终端统一平台模块化设计方法 | |
CN107943732B (zh) | 一种基于国产化fpga器件实现1553b总线模块 | |
CN104391770A (zh) | 一种嵌入式数据安全***用soc芯片的在线调试及上位机通讯模块 | |
CN107621943A (zh) | 一种fpga动态批量烧写***及方法 | |
KR101593835B1 (ko) | Plc 시스템 | |
CN103279061A (zh) | 基于dsp平台的接口可扩展程序烧写方法 | |
CN112015458A (zh) | 设备升级方法、终端设备、电子设备和存储介质 | |
CN101105747A (zh) | 一种电站通信***及其规约库实现方法 | |
CN109144853B (zh) | 一种软件定义无线电SoC芯片调试*** | |
CN103914304B (zh) | 一种基于sap平台的不同结构类型参数转换方法 | |
CN102508694B (zh) | 一种虚拟机文件运行方法及*** | |
CN106855846A (zh) | 一种基于PCIE Switch的PCIE信号扩展***及方法 | |
CN104836710A (zh) | 一种基于分布式***一主多从通信的方法与装置 | |
US20140022971A1 (en) | Method and device of supporting arbitrary replacement of multiple data units | |
CN205210574U (zh) | 一种基于微控制器实现fpga数据配置的双核心控制模块 | |
CN112947955B (zh) | 应用程序的架构更新方法、装置、电子设备及存储介质 | |
CN101908002A (zh) | 一种任务路径切换方法及装置 | |
CN105677254A (zh) | 一种数据处理方法及装置 | |
CN102541797A (zh) | 一种支持多种主机接口的实现方法及其*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160615 |