断言assert的使用

<pre name="code" class="cpp">#include<stdio.h>
#include <assert.h>
/*
程序一般分为 Debug 版本和 Release 版本,Debug 版本用于内部调试,Release 版本
发行给用户使用。
断言 assert 是仅在 Debug 版本起作用的宏,它用于检查“不应该”发生的情况。
在运行过程中,如果 assert 的参数为假,那么程序就会中
止(一般地还会出现提示对话,说明在什么地方引发了 assert)*/

void test(int a,int b)/*实现a和b的除法*/
{
	assert(b!=0);//测试  断言assert  里面是正确的情况 如果不符合则终止并且输出错误情况
	/*result:
	a.out: 9assertTest.c:12: test: Assertion `b!=0' failed.
	已放弃 (核心已转储)
	*/
	printf("a/b =%ld\n",(float)a/b);
}

int main()
{
	int a,b;
	scanf("%d%d",&a,&b);
	test(a,b);
	return 0;
}
/*assert 不是一个仓促拼凑起来的宏。为了不在程序的 Debug 版本和 Release 版本引起
差别,assert 不应该产生任何副作用。所以 assert 不是函数,而是宏。程序员可以把 assert
看成一个在任何系统状态下都可以安全使用的无害测试手段。如果程序在 assert 处终止
了,并不是说含有该 assert 的函数有错误,而是调用者出了差错,assert 可以帮助我们
找到发生错误的原因。
很少有比跟踪到程序的断言,却不知道该断言的作用更让人沮丧的事了。你化了很
多时间,不是为了排除错误,而只是为了弄清楚这个错误到底是什么。有的时候,程序
员偶尔还会设计出有错误的断言。所以如果搞不清楚断言检查的是什么,就很难判断错
误是出现在程序中,还是出现在断言中。幸运的是这个问题很好解决,只要加上清晰的
注释即可。这本是显而易见的事情,可是很少有程序员这样做。这好比一个人在森林里,
看到树上钉着一块“危险”的大牌子。但危险到底是什么?树要倒?有废井?有野兽?
除非告诉人们“危险”是什么,否则这个警告牌难以起到积极有效的作用。难以理解的
断言常常被程序员忽略,甚至被删除
*/



                                    
posted @ 2015-11-05 19:28  cloudren2020  阅读(138)  评论(0编辑  收藏  举报