按照设计,Q_ASSERT
不会导致应用程序在发布模式下失败。我的问题是里面的代码Q_ASSERT
仍然在发布模式下运行吗?
bool assertTest()
{
int x = 0;
Q_ASSERT(++x);
return x == 1;
}
在发布模式下会assertTest()
返回与调试模式下不同的值吗?
Qt文档指出
如果在编译期间定义了 QT_NO_DEBUG,Q_ASSERT 什么也不做。
此外,它警告如果断言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; }
断言表达式中的副作用几乎总是一个错误。在合格的代码审查和/或使用静态分析工具时,它们应该被标记。Q_ASSERT 做什么并不重要,无论如何依赖它都是不好的——即使你知道它做什么。