断言是一个表达式,用来约束当前的程序变量符合一定的条件。如果断言失败,程序会抛出一个异常。断言通常用于调试和测试,可以在程序中加入一些检查点,确保程序的正确性。 我们提供了高级的断言库,可以用来检查变量的类型、值、长度等。
断言级别
ZeroErr提供三种不同级别的断言:
- CHECK: 警告级别(WARN)- 当断言失败时,会输出警告信息,但程序继续执行
- REQUIRE: 错误级别(ERROR)- 当断言失败时,会抛出异常并中断当前执行流
- ASSERT: 致命级别(FATAL)- 当断言失败时,会抛出异常并应该终止程序
断言类型
基本断言
最基本的断言用于检查条件是否为真:
#define ASSERT(...)
定义 assert.h:173
#define CHECK(...)
定义 assert.h:167
#define REQUIRE(...)
定义 assert.h:170
反向断言
检查条件是否为假:
#define REQUIRE_NOT(...)
定义 assert.h:171
#define CHECK_NOT(...)
定义 assert.h:168
#define ASSERT_NOT(...)
定义 assert.h:174
异常断言
检查代码是否抛出异常:
#define ASSERT_THROWS(...)
定义 assert.h:175
#define CHECK_THROWS(...)
定义 assert.h:169
#define REQUIRE_THROWS(...)
定义 assert.h:172
比较断言
提供各种比较操作的断言:
#define CHECK_GE(...)
定义 assert.h:203
#define CHECK_LE(...)
定义 assert.h:201
#define REQUIRE_LE(...)
定义 assert.h:207
#define REQUIRE_GT(...)
定义 assert.h:208
#define CHECK_LT(...)
定义 assert.h:200
#define REQUIRE_LT(...)
定义 assert.h:206
#define CHECK_NE(...)
定义 assert.h:199
#define REQUIRE_EQ(...)
定义 assert.h:204
#define ASSERT_LT(...)
定义 assert.h:212
#define ASSERT_NE(...)
定义 assert.h:211
#define REQUIRE_GE(...)
定义 assert.h:209
#define ASSERT_GE(...)
定义 assert.h:215
#define CHECK_GT(...)
定义 assert.h:202
#define CHECK_EQ(...)
定义 assert.h:198
#define ASSERT_EQ(...)
定义 assert.h:210
#define ASSERT_GT(...)
定义 assert.h:214
#define REQUIRE_NE(...)
定义 assert.h:205
#define ASSERT_LE(...)
定义 assert.h:213
自定义消息
所有断言宏都支持添加自定义消息,将在断言失败时显示:
CHECK(x > 0,
"x必须为正数,当前值:{}", x);
REQUIRE_EQ(result, expected,
"计算结果不匹配,期望:{},实际:{}", expected, result);
禁用断言
如果希望在发布模式下禁用所有断言,可以定义ZEROERR_NO_ASSERT宏:
#define ZEROERR_NO_ASSERT
断言结果输出
当断言失败时,ZeroErr会自动输出详细的错误信息,包括:
- 断言级别(WARN/ERROR/FATAL)
- 断言表达式及其展开结果
- 源文件位置和行号
- 自定义错误消息(如果提供)