linux assert,assert()用法总结

首先assert()和sizeof一样,并不是函数,而是一个宏。assert宏的原型定义在中:#include

//Linux下的定义

void assert(scalar expression);

//VS里面的定义

#define assert(e) ((e) ? (void)0 : _assert(#e, __FILE__, __LINE__))

Linux下的man文档是这样描述的:If the macro NDEBUG was defined at the moment was last included, the macro assert() generates no code, and hence does nothing at all. Otherwise, the macro assert() prints an error message to standard error and terminates the program by calling abort(3) if expression is false (i.e., compares equal to zero).

The purpose of this macro is to help the programmer find bugs in his program. The message "assertion failed in file foo.c, function do_bar(), line 1287" is

of no help at all to a user.

大概意思已经说得很明确了:

如果在(最后一次)包含文件的时候,如果没有使用NDEBUG宏,那么当assert的参数表达式为假的时候,assert就会向标准输出打印一条错误消息,并且调用abort()函数来终止程序。相反,如果定义了NODEBUG宏,那么assert并不生成任何代码,也就是什么也不做。

这个宏的作用呢也是帮助程序员找到程序的bug,输出信息对于用户来说是毫无用处的。

注意:在C89中,expression必须是整型的,否则assert的行为是未知的。但是在C99中,expression可以是任何标量类型。

下面用一个例子来说明assert的用法:#include

#include

#include

int main()

{

FILE *fp;

fp = fopen("test1.txt", "w"); //以可写的方式打开一个文件,如果不存在则创建一个,所以此处fp不会为NULL

assert(fp); //因为fp不会为NULL,也即不为假,所以此处不会出错

fclose(fp);

fp =fopen("test2.txt", "r"); //以只读方式打开test2.txt文件,假设该文件不存在,则打开失败,fp为NULL

assert(fp); //fp为NULL,即为假,此处出错。assert会打印出错信息,并调用abort终止程序。

fclose(fp);

return 0;

}

assert使用虽然非常方便,可以很容易的定位程序的bug,但是频繁的调用会极大的影响程序的性能,增加额外的开销。在调试结束后,可以通过在#include 语句之前插入#define NDEBUG来禁用assert调用。另外,assert在程序的Release版本中是无效的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言assert函数是一个调试工具,用于在程序检查条件是否为真。当条件为假时,assert函数会断程序的执行并输出错误信息。 assert函数的定义如下: #include <assert.h> void assert(int expression); assert函数的作用是检查expression是否为真。如果expression为假,则assert函数会打印出错误消息,并终止程序的执行。如果expression为真,则assert函数不会有任何操作。 以下是assert函数的用法总结和注意事项: 1. 在函数使用assert可以检验传入参数的合法性。例如,在函数开始处可以使用assert检查参数的范围是否合理。 2. 每个assert只检验一个条件,以便在断言失败时可以准确定位到哪个条件失败。 3. 不要在assert使用改变环境的语句,因为assert只在调试模式下生效,如果包含改变环境的语句,可能会导致程序在真正运行时遇到问题。 4. 在调试结束后,可以通过在包含#include <assert.h>的语句之前插入#define NDEBUG来禁用assert调用。 下面是一个使用assert函数的示例代码: #include <stdio.h> #include <assert.h> int main() { int i = 0; while (1) { i++; printf("Before assert is %d.\n", i); assert(i <= 5); printf("After assert is %d.\n", i); // 当i>5时,不会执行到这一句 } return 0; } 在上面的示例assert函数用于检查变量i是否小于等于5。如果i大于5,则assert函数会断程序的执行,并输出错误信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值