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版本中有效。
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版本中有效。
相关文章推荐
- (转)Should 断言的基本使用方法
- Android开源组件SlidingMenu的基本使用方法和SlidingMenuDemo
- Runtime经常使用的方法
- matplotlib基本使用方法示例
- PopupWindow基本使用方法
- iOS贝塞尔曲线(UIBezierPath)的基本使用方法
- 四种xml操作方式的基本使用方法
- Vi编辑器的基本使用方法
- iOS开发UITableView基本使用方法总结
- Python中常用包——sklearn主要模块和基本使用方法
- JsPlumb 基本使用方法( JsPlumb & JQ ContextMenu & JQ Dialog)
- ReactiveCocoa的基本使用方法
- 正则表达式基本使用方法
- dwr的基本使用,异常处理,和spring集成方法
- vi/vim 基本使用方法
- Log4j基本使用方法
- XUtils3框架的基本使用方法(二)
- 正則表達式基本使用方法简单介绍
- Menu的基本使用方法
- Android中startService基本使用方法概述