c library-assert.h

本文详细介绍了assert断言的使用方法及原理。当表达式的值为0时,assert会在stderr上打印一条包含源文件名、行号、函数名及表达式的诊断消息,并调用abort()终止程序运行。此外,还提供了两种屏蔽assert的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原型是: void assert( int expression);

如果宏的参数求值结果为非零值,则不做任何操作(no action);如果是零值,用宽字符(wide characters)在stderr上打印诊断消息,然后调用abort()。诊断消息包括:

  • 源文件名字 (在stdlib.h中声明的宏__FILE__的值)

  • 所在的源文件的行号(在stdlib.h中声明的宏__LINE__的值)

  • 所在的函数名 (在stdlib.h中声明的宏__func__的值),这是 C99新增的特性

  • 求值结果为0的表达式


程序可以屏蔽掉所有的assert()而无需修改源代码。

方法1:编译时添加宏定义的命令行选项,定义NDEBUG

    gcc -o abc abc.c -DNDEBUG

    -D 设置宏。-U用于取消宏。

    -D TRUE=true,等价于:#define TRUE true;

    -D macro,等价于在头文件中定义:#define macro 1,实际上也达到了定义:#define macro的目的

     gcc -DYES -UYES -o helloyesno hello.c 等于没有设置宏。


方法2:在源程序程序引入<assert.h>之前就使用#define NDEBUG来定义宏。被屏蔽的assert()甚至不对传递给它的参数表达式求值,因此使用assert()时其参数表达式不能有副作用(side-effects).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值