断言 C++问题失败
Assertion Failed in C++ questions
当我们想要禁用断言时,我们必须定义NDEBUG,但是为什么要在包含断言头文件之前定义它?
第二个问题:禁用断言和使用宏断言有什么意义?
当我们想要禁用断言时,我们必须定义 NDEBUG,但为什么要在包含断言头文件之前定义它?
因为assert
的定义类似于以下代码片段:
#ifdef NDEBUG
#define assert(condition) ((void)0)
#else
#define assert(condition) /*implementation defined*/
#endif
现在,只有在事先定义了NDEBUG
的情况下,条件才为真。
第二个问题:禁用断言和使用宏断言有什么意义?
断言会消耗运行时。您仍然希望它们保留在已发布的产品中,但不想检查它们。例如:
auto a = b;
assert(a == b);
如果相等性测试需要很长时间,这是您希望在生产环境中避免的事情。但是,在调试/测试时,最好知道第一行实际上生成了一个与原始对象相等的副本。
总而言之,您可以使用assert()
在开发/调试时断言某些内容,当此断言在测试期间成立时,您可以安全地禁用它们以进行发布。
相关文章:
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 我应该如何在C++中使用结构体解决输入失败的问题?
- 调试模板时出现问题.专门针对 Linux GCC 7、GCC 6、GCC 5、GCC 4.9 错误构建失败:模板参数 1
- 查找在 4 和问题中代码失败的测试用例
- exteranl原生构建问题,构建命令失败,android工作室
- build命令失败,外部原生问题android工作室
- C ++回测问题:如何检查构造函数在假定失败时是否失败(给定输入的无效参数)
- 断言失败错误,C++中的矢量下标超出范围问题
- 如何解决来自 arduino 的 post 请求的问题,在失败之前只收到 2-3 次
- TFS构建由于链接问题而失败
- 班级路径问题 - getJnienv失败了
- 由于libkern.h中的语义问题,Xcode Build失败
- C++ 运行失败:退出值 2 - 我的代码出了什么问题?
- 我遇到此问题,运行程序时出现一个弹出窗口,指出调试断言失败
- 断言在C++问题中失败
- 生成文件问题,获取"目标'rgbapixel.o'的配方失败"
- 使用快速英特尔随机生成器(SSE2)会因堆栈问题而失败..已损坏
- C++将节点添加到链表的开头一次后失败.其他方法也有问题
- 失败错误处理问题
- Xcode 链接器命令失败问题