关于assert系统函数
- assert使用
assert一般用于检测函数参数的合法性,攻城狮们可以自己封装Assert作为宏,比如:
#define Assert(condition)
do {
if (condition){
NUll;
} else {
Assert(__FILE__ , __LINE__);
}
} while(0)
调用时,像这样:
void Test(unsigned char *str)
{
ASSERT(str != NULL);
/*函数处理代码*/
}
- assert注意事项
assert中不应该使用函数调用、变量赋值、使用变量修改符(++、- -等)。比如:
for (i = 0; i < 100; i++){
Assert(do_something() == 0);
}
那么每次assert就会展开到上面介绍的do while中,会非常影响性能。
正确的是assert中只判断bool型的返回值即可:
bool ret;
for (i = 0; i < 100; i++){
ret = do_something();
Assert(ret);
}
- PS
注意,不要滥用assertions 。请不要使用它来检查你「认为应该为真」的条件,请只使用它来检查「一定必须为真」的条件。滥用assertions 可能会造成难以维护的重复逻辑。在一段逻辑中加入assertions 是有好处的,因为它迫使你重新考虑这段代 码的约束条件。如果「不满足这些约朿条件,程序也可以正常运行」,assertions 就不会带给你任何帮助,只会把代码变得混乱,并且有可能妨碍以后的修改。你应该常常问自己:如果assertions 所指示的约束条件不能满足,代码是否仍能正常运行?如果可以,就把assertions 拿掉。(来自:https://www.kancloud.cn/sstd521/refactor/194285)