第一篇:assert.h快速入门 - 梅花香自苦寒来 - 博客园 梅花香自苦寒来作文
简介:
头文件assert.h唯一的目的是提供宏assert的定义。如果断言非真(expression==0),则程序会在标准错误流输出提示信息,并使程序异常中止( 调用abort() )。
定义:
view sourceprint?
1 void assert (int expression);
用法:
view sourceprint?
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并未执行,且有这样的输出:
view sourceprint?
1 main: Assertion `a > b' failed.
原因就是因为a其实小于b,导致断言失败,assert输出错误信息,并调用abort()中止了程序执行。
接下来,我们把程序第一行的注释取消掉看看,即定义了宏NDEBUG以后会导致程序执行结果有什么变化:
view sourceprint?
1 a is larger than b!
是的,程序正常执行完毕,且输出了“a is larger than b!”这句话,但这个结果在逻辑上明显是错的,因为我们期望的是a大于b才输出这句话。
由此我们可以看出assert和NDEBUG的作用:
宏NDEBUG会影响assert的行为,如果定义了NDEBUG,宏assert就什么也不干,如果没有定义,则assert会在断言失败时调用abort()中止程序执行,并输出错误信息。这种行为对我们调试程序是不可或缺的!
作者:Yao
首发自:http://blog.yaohuiji.com/
欢迎转载,作者期望转载时带上原文链接,不过这不是必须的。但务必在文章标题处标明【转载】
分类: C标准库快速入门
更多阅读
2014年的第一篇正文 英语一10年第一篇阅读
2014年的第一篇正文,还能不能比以往时候来的更猛一些?还是说说大格局,起点设在习近平提议全场以热烈掌声致谢胡锦涛的那一刻。这一刻,以胡锦涛为总操盘手的惊涛骇浪的中国人民喋血美元的战役结束了。此役解除了美国对中国的长期战略压
基金入门知识:10分钟基金快速入门分享 - 基金学院 - 理财大学 大学生理财基金模式
基金入门知识:10分钟基金快速入门[分享]基金入门知识:-----------------------------------------------------------------------------------本文源自口碑理财网 www.kblcw.com本文源自口碑理财网 www.kblcw.com本文为理财投资知识
精美图片欣赏:荷塘月色--4 - 山间溪流的日志 - 网易博客 性赏的日志网易博客图
精美图片欣赏:荷塘月色--4精美图片欣赏:荷塘月色--4编辑:山间溪流rwad推荐相关阅读 博客素材大全仓库 山间溪流博客精品典藏
《韩国首席妈妈绝招教子:六个孩子是博士》中国最著名博客女王干
第一篇:我的安哥拉印象
”安哥拉位于非洲西南部,首都罗安达,西滨大西洋,北及东北邻刚果民主共和国,南邻纳米比亚,东南邻赞比亚,另有一块外飞地卡宾达省与刚果共和国、刚果民主共和国相邻。安哥拉经济以农业与矿产为主,也有炼油工业,主要分部于卡宾达的滨海地带。食