分享

assert.h快速入门

 小菜鸟020 2011-03-23

简介:

头文件assert.h唯一的目的是提供宏assert的定义。如果断言非真(expression==0),则程序会在标准错误流输出提示信息,并使程序异常中止( 调用abort() )。

定义:

1 void assert (int expression);

用法:

01 //#define NDEBUG
02 #include <assert.h>   
03   
04 int main(int argc, char* argv[] )
05 {
06     int a = 12;
07     int b = 24;
08   
09     assert( a > b );
10   
11     printf("a is larger than b!");
12   
13     return 0;
14 }

直接运行上面的程序会发现程序中止,printf并未执行,且有这样的输出:

1 main: Assertion `a > b' failed.

原因就是因为a其实小于b,导致断言失败,assert输出错误信息,并调用abort()中止了程序执行。
接下来,我们把程序第一行的注释取消掉看看,即定义了宏NDEBUG以后会导致程序执行结果有什么变化:

1 a is larger than b!

是的,程序正常执行完毕,且输出了“a is larger than b!”这句话,但这个结果在逻辑上明显是错的,因为我们期望的是a大于b才输出这句话。
由此我们可以看出assert和NDEBUG的作用:
宏NDEBUG会影响assert的行为,如果定义了NDEBUG,宏assert就什么也不干,如果没有定义,则assert会在断言失败时调用abort()中止程序执行,并输出错误信息。这种行为对我们调试程序是不可或缺的!

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多