c++ - "assert"函数是什么?

标签 c++ c assert

我一直在学习 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));

当您进行发布(非调试)构建时,您还可以通过定义 NDEBUG 宏来消除评估 assert 语句的开销,通常使用编译器开关。这样做的必然结果是您的程序应该从不依赖断言宏运行。

// 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() 并且不保证做任何事情,断言应该只用于测试开发人员假设的事情,而不是,例如,用户输入数字而不是字母 (应该通过其他方式处理)。

关于c++ - "assert"函数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1571340/

相关文章:

C++程序深奥地卡住

objective-c - Objective C 结构语法

c - 打印链表时,为什么原来的头指针没有变

c - 如何连接指针数组

typescript 检查类型 A === 类型 B | C型

c++ - LNK1104 无法打开文件 libboost_random-vc140-mt-1_61.lib 等

c++ - 类成员指向STL列表的特定节点成员?

java - 如何在代码中为 junit 测试禁用 Java 断言

javascript - JavaScript 中的 “assert” 是什么?

c++ - 洛基 C++ : How does 'ScatterHierarchyTag' solve the inheritance ambiguity?