;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 }
更多技术内容和书籍资料获取敬请关注微信公众号“明解嵌入式”