分享

ASSERT什么时候用?怎么用?

 lhzstudio 2012-05-08
ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。

    ASSERT只有在Debug版本中才有效,如果编译为Release版本则被忽略。


鉴于ASSERT以上红色标注的特点:
(1)它能够报告错误,终止执行。利用此特点可帮助调试,出错时立即得到反馈。
(2)release版本中被忽略。因为此特点,我们就必须注意,程序中应当有相应的处理错误的代码,不能依靠ASSERT。


good example :

ASSERT(NULL != pbData); //pbData是参数
    if (NULL == pbData)
    {
        hr = E_INVALIDARG;
        goto Error;
    }

bad example :

......
     ASSERT( n != 0);
     k = 10/ n;    //release版本中如果n=0,在这一行程序便会崩溃。
     ......

还有一种用法,就是在不正常的状态下加入ASSERT(0),强行停止。
比如,上面的例子也可以改成如下形式
    if (NULL == pbData)
    {
        ASSERT(0);
        hr = E_INVALIDARG;
        goto Error;
    }


PS:小写assert()的功能类似,它是ANSI C标准中规定的函数,它与ASSERT的一个重要区别是可以用在Release版本中。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多