按照设计,Q_ASSERT
不会导致应用程序在发布模式下失败。我的问题是Q_ASSERT
内的代码是否仍在发布模式下运行?
bool assertTest()
{
int x = 0;
Q_ASSERT(++x);
return x == 1;
}
释放模式中assertTest()
将返回与调试模式不同的值吗?
答案 0 :(得分:2)
Qt文档states
如果在编译期间定义了QT_NO_DEBUG,则Q_ASSERT不执行任何操作。
此外,warns如果断言被禁用,则Q_ASSERT
条件将不会被执行。
如果,
Q_ASSERT()
,Q_ASSERT_X()
和Q_CHECK_PTR()
扩展为空 编译期间定义了QT_NO_DEBUG
。 因此, 这些宏的参数不应该有任何副作用。这是一个 错误使用Q_CHECK_PTR()
:char *alloc(int size) { char *ptr; Q_CHECK_PTR(ptr = new char[size]); // WRONG return ptr; }
答案 1 :(得分:1)
断言表达式中的副作用几乎总是错误的。在主管代码审查期间和/或使用静态分析工具时,应标记它们。 Q_ASSERT究竟做了什么并不重要,无论如何依赖它都是不好的 - 即使你知道它做了什么。