C 语言中assert的用法
assert
assert用法搭配 assert短语搭配
assert用法搭配 assert短语搭配
Evaluates an expression and when the result is FALSE, prints a diagnostic message and aborts the program.
void assert( int expression );
Routine Required Header Compatibility
assert
上面是来自msdn的解释;
assert的返回值为空,用法:assert(表达式)
eg: assert(a>b);
他的作用是判断a是否大于b 如果a小于b则屏幕输出错误原因,并且程序终止。
assert() 是什么?怎样用它?
原本以为assert是C++中的东东,没想到C里就有。:-)
assert() 是个定义在
assert(p != NULL);
一个失败的断言会中断程序。断言不应该用来捕捉意料中的错误, 例如 malloc() 或 fopen() 的失败。
不是用来检查错误的
当程序员刚开始使用断言时,有时会错误地利用断言去检查真正地错误,而不去检查非法的情况。看看在下面的函数strdup中的两个断言:
char strdup(char str)
{char strNew;
assert(str != NULL);
strNew = (char)malloc(strlen(str)+1);
assert(strNew != NULL);
strcpy(strNew, str);
return(strNew);
}个断言的用法是正确的,因为它被用来检查在该程序正常工作时绝不应该发生的非法情况。第二个断言的用法相当不同,它所测试的是错误情况,是在其最终产品中肯定会出现并且必须对其进行处理的错误情况。
这是个定义在
assert(p != NULL);
一个失败的断言会中断程序。断言不应该用来捕捉意料中的错误, 例如 malloc() 或 fopen() 的失败。
断言,具体用法看下面
assert的作用是什么
是程序调试很重要的手段,ASSERT( f )在Debug模式下,每次运行到这里后会计算括号中的表达式,如果表达式为0,则中断执行,弹出一个框,用户可选择“继续”,“重试”,“忽略”在Release模式下,这句语句不会被编译进代码。ASSERT一般用于程序内部确认参数的正确性,即调用内部函数的时候,要由调用者保证参数的正确,而被调用函数内部,就可以通过ASSERT来检查参数是否满足要求。
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生异,由美国标准局为C语言制定了一套完整的美国标准语法,称为ANSI C,作为C语言最初的标准。 [1] 目前2011年12月8日,标准化组织(ISO)和电工委员会(IEC)发布的C11标准是C语言的第三个标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
assert
中文为“断言”,它断定某一个实际的运行值和预期想一样,否则就抛出异常。spring
对方法入参的检测借用了这个概念,其提供的assert
类拥有众多按规则对方法入参进行断言的方法,可以满足大部分方法入参检测的要求。这些断言方法在入参不满足要求时就会抛出
illegalargumentexception。
使用断言
assert()宏是用于保证满足某个特定条件,用法是:
assert(表达式);
如果表达式的值为,整个程序将退出,并输出一条错误信息。如果表达式的值为真则继续执行后面的语句。
使用这个宏前需要包含头文件assert.h
例如
#include
#include
void main()
{float a,b;
scan("%f %f",&a,&b);
assert(b!=0);
printf("%fn",a/b);
}以上的程序要计算A/B的值,因此要求b!=0,所以在程序中使用了assert()用于确保b!=0,如果b==0,则程序会退出。
assert()就是一个debug断言.
断定()里面的表达试一定为真,否则弹出debug断言框
你说的可以检查指针是否为NULL就是利用了指针为空的值=0(也就是false)
比如:
assert(p); p!=0时,成功. p==0时失败.
assert用法
凡是响应assert
说明异常
所以要做的
不是避免assert产生的闪退
而是根据每个闪退的点
避免出现assert失败的情况。
assert主要用于程序的测试阶段,在发行版程序中,可以通过定义NDEBUG宏的办法关闭assert
当assert测试不满足条件时,程序会中断并退出,同时给出中断提示信息。
当if测试不满足条件时,会继续执行后面的语句,不会中断程序。
什么时候用assert
断言是一个包含布尔表达式的语句,在执行这个语句时定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 Assertionerror。它用于调试目的:
assert(a > 0); // throws an Assertionerror if a <= 0
断言可以有两种形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 应该总是产生一个布尔值。
Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。
断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记:
jac -source 1.4 Test.ja
要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。
要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。
要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。
可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。
调试时判断一个表达式的值是否为真
一般只在单元测试中使用