独闷闷网

 找回密码
 立即注册
搜索
查看: 399|回复: 0
收起左侧

[原创] 如何巧妙的使用条件编译,避免到处加 #ifdef这种语句的麻烦?已解答。

[复制链接]
发表于 2018-3-11 14:18:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
李猛-珠海:
问大家个问题,单片机在编程初期的时候为了调试观察数据会在程序中写很多串口打印的语句,即Printf 。当程序写好了(此时程序可以稳定的运行了)以后需要把这些串口打印的语句再一个一个删除的话非常麻烦,因为程序红很多地方都谢了串口打印的语句,请问有什么好的办法解决这个问题吗?

肖亚平-成都:
条件编译可以解决你的问题.
比如  :

  1. #define  _DEBUG //调试模式。当换回产品模式的时候,把这行代码注释掉就可以。

  2. #ifdef _DEBUG
  3.   // ... do some operations,串口打印
  4.   #endif
复制代码



李猛-珠海:
  1. #ifdef _DEBUG
  2.   printf("");   
  3.   #endif              在程序中每处需要打印的地方都这么写吗?
复制代码


hippo-深圳:
  1. #define DEBUG_LOG
  2. #ifdef DEBUG_LOG
  3. #define log_msg(s)    printf(s)
  4. #else
  5. #define log_msg(s)  
  6. #endif
复制代码

这样好一些,不用到处加 #ifdef xxxx

李猛-珠海:
这里我有个疑问   当没有#define DEBUG_LOG 这条语句的时候
  1. #ifdef DEBUG_LOG  
  2. #define log_msg(s)    printf(s)
  3. #else
  4. #define log_msg(s)  
  5. #endif
复制代码

会编译#else后的 #define log_msg(s) 这条语句   这条语句有舍作用呢
为啥就能够不打印呢?



hippo-深圳:
DEBUG_LOG没有定义时, log_msg()就是一个空语句,不会生产代码。STM32库里面的 assert_param() 也是这样搞的。搜索一下 USE_FULL_ASSERT,很普通的做法。

乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2018-9-24 11:50 , Processed in 0.096290 second(s), 18 queries .

快速回复 返回顶部 返回列表