Chinaunix首页 | 论坛 | 博客
  • 博客访问: 114514
  • 博文数量: 83
  • 博客积分: 2531
  • 博客等级: 少校
  • 技术积分: 865
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-31 20:40
文章分类

全部博文(83)

文章存档

2011年(7)

2010年(76)

我的朋友

分类: C/C++

2010-04-07 18:58:31

assert()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE   (0),   程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。例如,变量n在程序中不应该为0,如果为0可能导致错误,你可以这样写程序:    
......    
assert(   n   !=   0);     
k   =   10/   n;    
......    
assert只有在Debug版本中才有效,如果编译为Release版本则被忽略。

assert(表达式);  
如果   表达式   的结果为真,则顺利通过,如果为假,中断程序运行。  
但是这是在debug模式下的情况,在release模式下,assert相当于“空语句”,编译器会忽略它,也就是说assert在release模式下不起作用。   
 

这是一个宏(而不是函数),如果其中的表达式为假的话就quit程序,一般在调试的时候使用,在VC中需要在debug模式时才有用  
  编译器通过静态分析代码来查错,断言程序自动检测运行时刻错误,我们就能尽早发现错误。一般有下面几个类型    
ANSI   C断言  
assert(),需包含和定义NDEBUG    
C运行时刻函数库断言   
需包含   是VC++中的特殊断言  
    _ASSERT不显示失效表达式  
    _ASSERTE显示失效表达式,但不支持Unicode      
MFC库的断言  
    ASSERT宏和_ASSERT宏  
MFC还提供了ASSERT宏的几个变种,象VERIFY、ASSERT_VALID等  

阅读(632) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~