您的位置:首页 > 其它

C Runtime中断言的基本使用方法

2009-01-17 16:25 267 查看
C RunTime提供给程序DEBUG版本多种断言函数,他们的用法和作用各不相同,现总结如下:

assert

头文件:<assert.h>

用法 :void assert( int expression );

解释 :最常用的断言方法,判断一个表达式是否为真,如果不为真,则打印出表达式、当前文件和当前行号,同时调用abort()例程终止程序。断言为假时,会出现对话框(带有“终止(A)调试(R)忽略(I)”),点击“忽略”仍然结束程序。

_ASSERT 和 _ASSERTE

头文件:<crtdbg.h>

用法 :_ASSERT( booleanExpression );

_ASSERTE( booleanExpression );

解释 : 这两个宏具有更加丰富的调试功能,它们在DEBUG版中定义如下:

#define _ASSERT(expr) _ASSERT_EXPR((expr), NULL)

#define _ASSERTE(expr) _ASSERT_EXPR((expr), _CRT_WIDE(#expr))

而_ASSERT_EXPR定义如下:

#define _ASSERT_EXPR(expr, msg) \

(void) ((!!(expr)) || \

(1 != _CrtDbgReportW(_CRT_ASSERT, _CRT_WIDE(__FILE__), __LINE__, NULL, msg)) || \

(_CrtDbgBreak(), 0))

可见在断言为假的时候,默认的行为是打印文件名,行号(_ASSERTE还打印表达式本身)信息。打印的信息在弹出对话框中,如果选择“忽略”,不会中止程序而是继续断言行后的程序。

CRT还提供了下面的函数来控制调试信息的输出方式:

int _CrtSetReportMode( int reportType, int reportMode );

例如如果我们想把断言的诊断信息输出到VS的调试器输出窗口,可以这样设置:

_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG);

设置以后,如果断言为假,不会出现对话框,只会把调试信息打印在VS的输出窗口中,程序继续运行。

最后:无论哪种形式的断言,只是在DEBUG版本中有效。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: