断言指令(assert)的用法

什么是断言指令?

断言指令的语义就是判断某个条件,如果结果不为真,就执行一段非常规的动作,一般为程序立马结束运行。

几种常见的断言指令

1.assert
条件判断失败就终止运行。
2.verify
条件判断失败继续执行,并输出错误。
3.waitfor
等条件加载成功后才向下继续执行,否则一直等待。

C/C++中断言指令的具体使用以及注意事项

assert宏的原型定义在assert.h中,其作用是如果它的条件返回错误,则终止程序执行。

#include "assert.h" 
void assert( int expression );

assert的作用是判断 expression 的返回值,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。

使用assert的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。

**注意:**程序一般分为Debug 版本和Release 版本,Debug 版本用于内部调试,Release 版本发行给用户使用。断言assert 是仅在Debug 版本起作用的宏,它用于检查“不应该”发生的情况。以下是一个内存复制程序,在运行过程中,如果assert 的参数为假,那么程序就会中止(一般地还会出现提示对话,说明在什么地方引发了assert)。

总结

断言是一种调试方式,断言失败会抛出错误警告并终止程序,只能在开发和测试阶段启用断言;

对可恢复的错误不能使用断言,而应该抛出异常;

断言很少被使用,更好的方法是编写单元测试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
C++ 中的宏定义和 C 语言中的宏定义类似,也是一种预处理指令,用于在编译之前将源代码中的标识符替换为指定的文本。不过,在 C++ 中,宏定义还可以用于实现一些类似函数的宏和模板元编程等高级特性。 C++ 中的宏定义的基本语法和 C 语言中类似,如下所示: ```c++ #define 宏名 宏体 ``` 其中,宏名是标识符,宏体可以是任意合法的 C++ 表达式、语句或代码块。例如: ```c++ #define PI 3.1415926 #define MAX(a, b) ((a) > (b) ? (a) : (b)) ``` 上面的宏定义中,第一个将宏名 PI 定义为常量 3.1415926,第二个将宏名 MAX 定义为求两个数的最大值的函数式。在源代码中,可以通过宏名来引用宏体,例如: ```c++ float r = 1.0; float area = PI * r * r; int max_num = MAX(3, 5); ``` 与 C 语言相比,C++ 中的宏定义还有一些高级特性,包括: 1. 可变参数宏:类似于 C 语言中的可变参数函数,可以定义一个参数数量不定的宏,例如: ```c++ #define PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__) ``` 上面的宏定义可以用来输出带格式的文本,类似于 printf 函数。 2. 预定义宏:C++ 中有一些预定义的宏,可以用来表示编译器、操作系统、编译时间等信息,例如: ```c++ #ifdef __cplusplus // C++ 代码 #else // C 代码 #endif ``` 上面的宏定义可以用来区分 C++ 代码和 C 代码。 3. 高级宏:C++ 中的宏定义还可以用来实现一些高级特性,比如模板元编程、泛型编程等。例如: ```c++ #define STATIC_ASSERT(condition) \ typedef char static_assertion_##__LINE__[(condition) ? 1 : -1] ``` 上面的宏定义可以用来实现静态断言,类似于 C++11 中的 static_assert。 需要注意的是,宏定义的滥用会导致代码的可读性和可维护性变差,因此需要谨慎使用宏定义,尽量使用 C++11 中的 constexpr、inline、template 等语言特性替代宏定义。此外,还需要注意宏定义的展开顺序和优先级,以避免出现错误或者副作用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

daijingxin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值