功能宏

功能宏开关模块的实现(C语言)

分类: 设计思路   445人阅读  评论(0)  收藏  举报

目录(?)[+]

一、功能宏优点

    在进行软件系统的开发过程中,对不同的功能模块的代码使用分别使用与之对应的宏将其控制起来,其有如下优点:

    ①、方便移植

        在移植过程中,可根据功能宏快速的将功能模块代码进行提取和分离。

    ②、增强可扩展性

        可通过宏的开启和关闭来控制此功能开启和关闭,增强了平台的可配置性、可扩展性。

    ③、快速定位问题

        在软件的运行或测试过程中,往往会出现各种问题,如果怀疑某一模块有问题,可将此功能模块关闭,如果问题消失,则说明问题就在此模块,否则可排除此模块。

    ④、提高开发效率

        如果未使用功能宏控制时,如果不要此功能时,则需要对代码进行修改、删除等操作,但之后有需要此功能时,又得重新去修改、增加相应的代码。而一旦有功能宏控制,只需将对应的宏开启或关闭就能达到想要的目的,而不用对代码进行任何的修改。

二、功能宏开关实现

    随着平台功能的不断增加,功能宏的数量也随之递增,此时会出现一个困扰设计和开发人员的问题:如何更加有效的管理功能宏?针对这种现象,故提出了功能宏开关模块。顾名思义,功能宏开关模块是通过一个开关(switch)来控制某个宏的开启和关闭,以此达到控制软件平台某个功能的开启和关闭。目前有2种方法实现功能宏开关模块:

①、通过Makefile实现

1. 宏开关设置

[html]  view plain copy
  1. // filename: mars_switch.mak  
  2. DEBUG_SUPPORT = TRUE  
  3.   
  4. OS_TYPE = AIX  

2. 宏的加载

[cpp]  view plain copy
  1. // filename: mars_option.mak  
  2. ifeq(TRUE, $(strip $(DEBUG_SUPPORT))  
  3.     OPTIONS += __DEBUG__  
  4. endif  
  5.   
  6. ifeq(LINUX, $(strip $(OS_TYPE))  
  7.     OPTIONS += __LINUX__  
  8. else  
  9.     ifeq(AIX, $(strip $(OS_TYPE))  
  10.         OPTIONS += __AIX__  
  11.     else  
  12.         ifeq(UNIX, $(strip $(OS_TYPE))  
  13.             OPTIONS += __UNIX__  
  14.         endif  
  15.     endif  
  16. endif  
3. 宏的编译
[cpp]  view plain copy
  1. // filename: Makefile  
  2. CFLAGS += $(patsubst %, -D%, $(OPTIONS))  
4. 宏的使用
[cpp]  view plain copy
  1. int main(int argc, const char *argv[])  
  2. {  
  3. #if defined(__LINUX__)  
  4.     fprintf(stdout, "OS is linux!");  
  5. #elif defined(__AIX__)  
  6.     fprintf(stdout, "OS is aix!");  
  7. #elif defined(__UNIX__)  
  8.     fprintf(stdout, "OS is unix!");  
  9. #endif /*__LINUX__*/  
  10. }  
②、通过头文件实现

1. 宏值定义

[cpp]  view plain copy
  1. // filename: mars_type.h  
  2. #define __ON__            (-1)  
  3. #define __OFF__           (-2)  
  4. #define __AUTO__          (-3)  
  5.   
  6. #define LINUX             (-1)  
  7. #define AIX               (-2)  
  8. #define UNIX              (-3)  
2. 宏开关设置
[cpp]  view plain copy
  1. // mars_switch.h  
  2.   
  3. #define CFG_DEBUG_SUPPORT  (__ON__)  
  4.   
  5. #define CFG_OS_TYPE        (LINUX)  
3. 宏的加载
[cpp]  view plain copy
  1. // filename: mars_features.h  
  2.   
  3. #if defined(CFG_DEBUG_SUPPORT) && (__ON__ == CFG_DEBUG_SUPPORT)  
  4.     #define __DEBUG__  
  5. #endif  
  6.   
  7. #if defined(CFG_OS_TYPE) && (LINUX == CFG_OS_TYPE)  
  8.     #define __LINUX__  
  9. #elif defined(CFG_OS_TYPE) && (AIX == CFG_OS_TYPE)  
  10.     #define __AIX__  
  11. #elif defined(CFG_OS_TYPE) && (UNIX == CFG_OS_TYPE)  
  12.     #define __UNIX__  
  13. #endif /*CFG_OS_TYPE*/  

4. 宏的使用

[cpp]  view plain copy
  1. int main(int argc, const char *argv[])  
  2. {  
  3. #if defined(__LINUX__)  
  4.     fprintf(stdout, "OS is linux!");  
  5. #elif defined(__AIX__)  
  6.     fprintf(stdout, "OS is aix!");  
  7. #elif defined(__UNIX__)  
  8.     fprintf(stdout, "OS is unix!");  
  9. #endif /*__LINUX__*/  
  10. }  

三、宏开关的使用

    通过以上方法的组织,便可轻松决定某个功能的开启和关闭。例如:

①、关闭__DEBUG__

    1. Makefile:将DEBUG_SUPPORT = FALSE

    2. 头文件:将CFG_DEBUG_SUPPORT = __OFF__

②、开启__UNIX__

    1. Makefile:将OS_TYPE = UNIX

    2. 头文件:将CFG_OS_TYPE = UNIX

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值