assert
断言(assert)的语义如下:
如果表达式的值为0(假),则输出错误消息并终止程序的执行(一般还会出现提示对话框,说明在什么地方引发了assert);如果表达式为真,则不进行任何操作。因此断言失败就表明程序存在一个bug。
使用assert的目的是捕捉在运行时不应该发生的非法情况
if
语义:
如果表达式的值为真,则执行其后的语句,否则不执行该语句。语句可以是单条语句,也可以是用花括号{}包括起来的复合语句。
使用if语句的目的是对于条件判断,满足条件则执行其后的语句,不满足则不执行该语句
区别:
1. assert语句仅仅在debug版本中才有效,而在release版本中无效;
if(NULL!=p)是在Release版本中检验指针的有效性;
2. assert一般用与检查函数参数的合法性(有效性)而不是正确性,但是合法的程序并不见得就是正确的程序。
3. if语句,简单地说就是“漏斗”,满足条件就进入,不满足则不进入。而assert仿佛就是“城门守卫”,满足条件就是进入城内(这里就是接下来的程序),不满足就阻止进入(程序中断);
4.assert这个宏只是帮助我们调试代码的,它的作用是:让用户在调试函数的时候把错误排除掉,而不是等待Release之后。assert可以帮助定位错误,而不是排除错误;
一般用与检查函数参数的合法性(有效性)而不是正确性,但是合法的程序并不见得
就是正确的程序。