MFC 断言
更新:2007 年 11 月
本主题适用于:
版本 |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
速成版 |
仅限本机 |
|||
标准版 |
仅限本机 |
|||
专业团队版 |
仅限本机 |
表格图例:
适用 |
|
不适用 |
|
默认情况下隐藏的一条或多条命令。 |
MFC 为断言检查定义 ASSERT 宏。它还定义 MFC ASSERT_VALID 和 CObject::AssertValid 以供检查 CObject 派生的对象的内部状态。
如果参数(一个表达式)计算为零或 false,则 MFC ASSERT 宏将暂停程序执行并警告用户。如果表达式计算为非零,则继续执行。
当断言失败时,将有一个消息对话框显示断言的源文件的名称和行号。如果在该对话框中选择“重试”,则对 AfxDebugBreak 的调用将导致执行中断到调试器。在此处,可以检查调用堆栈和其他调试器功能以确定断言失败的原因。如果已启用实时调试,且断言失败发生时调试器未运行,则该对话框可以启动调试器。
下面的示例演示如何使用 ASSERT 检查函数的返回值:
int x = SomeFunc(y);
ASSERT(x >= 0); // Assertion fails if x is negative
可以将 ASSERT 用于 IsKindOf 函数以提供函数参数的类型检查:
ASSERT( pObject1->IsKindOf( RUNTIME_CLASS( CPerson ) ) );
ASSERT 宏仅在程序的调试版本中捕捉程序错误。该宏在“Release”版本中不生成任何代码。如果需要在发布版本中计算表达式,请使用 VERIFY 宏代替 ASSERT。