我一直在研究OpenCV教程,并遇到了assert
功能;它有什么作用?
答案
assert
如果程序的参数被证明是错误的,将终止程序(通常带有消息引用声明的消息)。如果发生意外情况,则在调试期间通常使用它,以使该程序更明显。
例如:
assert(length >= 0); // die if length is negative.
您还可以添加一条更有信息的消息,如果失败了,则可以显示:
assert(length >= 0 && "Whoops, length can't possibly be negative! (didn't we just check 10 lines ago?) Tell jsmith");
否则,
assert(("Length can't possibly be negative! Tell jsmith", length >= 0));
当您进行版本(非删除)构建时,您也可以删除评估的开销assert
通过定义NDEBUG
宏,通常带有编译器开关。绝不依靠断言宏运行。
// BAD
assert(x++);
// GOOD
assert(x);
x++;
// Watch out! Depends on the function:
assert(foo());
// Here's a safer way:
int ret = foo();
assert(ret);
从调用Abort()的程序组合而不是保证做任何事情的组合,只能使用断言来测试开发人员假设的事物,而不是例如,用户输入数字而不是字母(应该是通过其他方式处理)。