assert
前言
我们在使用代码时,为了节省时间,经常进行代码的复用,那么如何保证别人在使用我们代码时可以达到预想的结果,加注释可能是一种办法,但一般都可以想到在我的函数体部分加入限制条件,但是今天我们我们介绍一种更普遍的方法,用assert断言来实现我们的想法。
在这里我们用一个增加数组元素的函数为例
-
void AddValue(int* arr, int value, int len, int index, int size){
-
if (arr != NULL && len > 0 && index < len && size < len) {
-
//移动数据
-
for (int i = size - 1; i >= index; i--) {
-
arr[i + 1] = arr[i];
-
}
-
//插入元素
-
arr[index] = value;
-
}
-
}
这我们可以看到,只有满足if中条件才能继续执行以下代码
我们再用断言来更改
-
void AddValue(int* arr, int value, int len, int index, int size) {
-
assert(arr != NULL && len > 0 && index < len&& size < len);
-
//移动数据
-
for (int i = size - 1; i >= index; i--) {
-
arr[i + 1] = arr[i];
-
}
-
//插入元素
-
arr[index] = value;
-
}
-
int main() {
-
int arr[10] = { 1,2,3 };
-
int len = sizeof(arr) / sizeof(arr[0]);
-
AddValue(arr, 0, len, 0, 6);
-
return 0;
-
}
要注意的是断言如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行,其次使用时应加上头文件#include<assert.h>
比如我们在这里将len输入为-1
会出现以下结果
这就可以提醒使用者输入发生了错误