原创作者:Qdieyou,转载请加注。
程序一般分为Debug 版本和Release 版本,Debug 版本用于内部调试,Release 版本发行给用户使用。(这个概念可能不大好理解,想想VC下,调试时有个选项,一个是debug,一个是release)
assert(表达式); 的意思是:当表达式为真时,程序继续运行,如果表达市为假,那程序就会停止运行,并提示错误信息。
注意:assert是一个宏,只在debug版本中起作用,在release版本中,该语句是不起任何作用的。
先简单的看一个例子吧!
以下为一个使用了断言的C源程序:
#include <stdio.h>
#include <assert.h>
void test(int *p)
{
assert(p != NULL);
printf("%d/n", *p);
}
int main(void)
{
test(NULL);
}
编译及运行结果:
Qdieyou@qdieyou /cygdrive/e/gcc
$ gcc -o assert assert.c
Qdieyou@qdieyou /cygdrive/e/gcc
$ ./assert
assertion "p != NULL" failed: file "assert.c", line 6
19331 [sig] assert 3288 e:/gcc/assert.exe: *** fatal error - called with threa
dlist_ix -1
Hangup
程序说明:由于我们在main函数中传了NULL指针值给test函数,在test函数执行到assert(p != NULL);发现表达式不为真,就终止了程序的运行,并提示错误的行数信息。
注意:由于assert宏只在debug版本中起作用,所以assert一般只用于内部函数对参数有效性进行检查,如果该函数作为一个外部接口来使用时,一般需要利用if,else语句进行防错设计。——Qdieyou
程序一般分为Debug 版本和Release 版本,Debug 版本用于内部调试,Release 版本发行给用户使用。(这个概念可能不大好理解,想想VC下,调试时有个选项,一个是debug,一个是release)
assert(表达式); 的意思是:当表达式为真时,程序继续运行,如果表达市为假,那程序就会停止运行,并提示错误信息。
注意:assert是一个宏,只在debug版本中起作用,在release版本中,该语句是不起任何作用的。
先简单的看一个例子吧!
以下为一个使用了断言的C源程序:
#include <stdio.h>
#include <assert.h>
void test(int *p)
{
assert(p != NULL);
printf("%d/n", *p);
}
int main(void)
{
test(NULL);
}
编译及运行结果:
Qdieyou@qdieyou /cygdrive/e/gcc
$ gcc -o assert assert.c
Qdieyou@qdieyou /cygdrive/e/gcc
$ ./assert
assertion "p != NULL" failed: file "assert.c", line 6
19331 [sig] assert 3288 e:/gcc/assert.exe: *** fatal error - called with threa
dlist_ix -1
Hangup
程序说明:由于我们在main函数中传了NULL指针值给test函数,在test函数执行到assert(p != NULL);发现表达式不为真,就终止了程序的运行,并提示错误的行数信息。
注意:由于assert宏只在debug版本中起作用,所以assert一般只用于内部函数对参数有效性进行检查,如果该函数作为一个外部接口来使用时,一般需要利用if,else语句进行防错设计。——Qdieyou