<QtAssert> 代理页面
函数
T * | q_check_ptr(T *p) |
宏
void | Q_ASSERT(bool test) |
void | Q_ASSERT_X(bool test, const char *where, const char *what) |
void | Q_CHECK_PTR(void *pointer) |
void | Q_UNREACHABLE |
(since 6.5) void | Q_UNREACHABLE_RETURN(...) |
宏文档
void Q_ASSERT(bool test)
如果test 是false
,则打印包含源代码文件名和行号的警告信息。
Q_ASSERT() 可用于在开发过程中测试前置和后置条件。如果QT_NO_DEBUG
是在编译过程中定义的,则它不会执行任何操作。
举例说明:
// File: div.cpp #include <QtGlobal> int divide(int a, int b) { Q_ASSERT(b != 0); return a / b; }
如果b
为零,Q_ASSERT 语句将使用qFatal() 函数输出以下信息:
ASSERT: "b != 0" in file div.cpp, line 7
另请参阅 Q_ASSERT_X(),qFatal() 和调试技巧。
void Q_ASSERT_X(bool test, const char *where, const char *what)
如果test 是false
,则打印信息what 以及位置where 、源文件名和行号。
Q_ASSERT_X 用于在开发过程中测试前置和后置条件。如果QT_NO_DEBUG
是在编译过程中定义的,则不执行任何操作。
举例说明:
// File: div.cpp #include <QtGlobal> int divide(int a, int b) { Q_ASSERT_X(b != 0, "divide", "division by zero"); return a / b; }
如果b
为零,Q_ASSERT_X 语句将使用qFatal() 函数输出以下信息:
ASSERT failure in divide: "division by zero", file div.cpp, line 7
另请参阅 Q_ASSERT(),qFatal() 和调试技巧。
void Q_CHECK_PTR(void *pointer)
如果pointer 是nullptr
,则打印一条包含源代码文件名和行号的信息,说明程序内存耗尽,并中止程序执行。如果启用了异常,则会抛出std::bad_alloc
。
如果在编译过程中定义了QT_NO_DEBUG
和QT_NO_EXCEPTIONS
,Q_CHECK_PTR 将不起作用。因此,您一定不能使用 Q_CHECK_PTR 来检查是否成功分配内存,因为在某些情况下检查会被禁用。
举例说明:
int *a; Q_CHECK_PTR(a = new int[80]); // WRONG! a = new (nothrow) int[80]; // Right Q_CHECK_PTR(a);
void Q_UNREACHABLE
告诉编译器当前点不能被任何执行到达,因此编译器可以将通向此处的任何代码路径作为死代码进行优化,也可以将从此处继续执行的代码作为死代码进行优化。
该宏用于标记不可能的条件。例如,下面是一个枚举:
enum Shapes { Rectangle, Triangle, Circle, NumShapes };
我们可以这样编写一个开关表:
switch (shape) { case Rectangle: return rectangle(); case Triangle: return triangle(); case Circle: return circle(); case NumShapes: Q_UNREACHABLE(); break; }
在此处插入 Q_UNREACHABLE() 的好处是,编译器会被告知不要为包含该值的形状变量生成代码。如果缺少该宏,编译器仍将为该值生成必要的比较。如果删除了大小写标签,某些编译器可能会发出警告,称某些枚举值未被检查。
在不可能的条件下使用该宏,可以消除代码死路,从而提高代码覆盖率。
在调试构建中,该条件由断言强制执行,以方便调试。
注: 使用Q_UNREACHABLE_RETURN() 宏为需要返回语句的编译器插入返回语句,而不会对抱怨其存在的编译器产生警告。
另请参阅 Q_ASSERT()、qFatal() 和Q_UNREACHABLE_RETURN()。
[since 6.5]
void Q_UNREACHABLE_RETURN(...)
这等同于
Q_UNREACHABLE(); return __VA_ARGS__;
除了会对编译器发出警告之外,它省略了返回。
该宏在 Qt 6.5 中引入。
另请参阅 Q_UNREACHABLE()。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.