设为首页 加入收藏

TOP

防御式编程之断言assert的使用(二)
2023-07-23 13:32:05 】 浏览:126
Tags:程之断 assert
;stdio.h> 2 #include <assert.h> 3 void fun1(int a) 4 { 5 assert(a > 0); 6 ... 7 } 8 void fun2(int *p) 9 { 10 assert(p != NULL); 11 ... 12 }
  • 不要使用影响正常逻辑的判断条件语句

  assert的判断条件语句一定是确定的,在Debug版本中使用的排除掉错误的条件逻辑,不要影响到Release版本时的正常逻辑。例如下面的例子,在Debug版本时,i++到>=100时,assert生效,程序终止;但是到了Release版本,由于要增加NDEBUG宏,assert()无效。assert(i++ < 100)就变成了空操作(void)0;由于没有i++语句执行,那么while成了死循环。

 1 #include <stdio.h>
 2 #include <assert.h>
 3 void main()
 4 { 5 int i = 0; 6 while(i <= 110) 7  { 8 assert(i++ < 100); 9 printf("i = %d\n",i); 10  } 11 }
  • 不要用多个判断条件语句

  一般一个assert只用一个判断语句来实现,如果在一个assert中使用多条判断语句,当错误发生时,会不知道是哪个条件语句出现错误,错误表现的就不直观。

 1 #include <stdio.h>
 2 #include <assert.h>
 3 void fun1(int a, int b) //错误使用
 4 {
 5     assert(a > 0 && b > 5); 6  ... 7 } 8 void fun2(int a, int b) //正确使用 9 { 10 assert(a > 0); 11 assert(b > 5); 12  ... 13 }

 


更多技术内容和书籍资料获取敬请关注微信公众号“明解嵌入式”

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇详解蓝牙模块的分类 下一篇CAN数据链路层的帧格式介绍——错..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目