今天在研究恩智浦杯某大学直立程序的时候,发现他们用断言来检测ADC模块采集的信息数据正确性问题
自己用断言不多,今天要积累一下
函数:void assert(int expression);
头文件:assert.h
作用机理:当表达式值为假时,assert宏就在stderr(标准错误流)写入一条错误信息,之后调用abort()函数来终止程序
assert标识出错误函数,错误文件,错误行数,方便开发者在标识地点找出错误
在嵌入式,尤其STM32,K60中有大量的断言.来检查问题
#include <stdio.h>
//#define NDEBUG
#include <assert.h>
int main()
{
int a;
char str[50];
printf("请输入一个整数值:");
scanf("%d",&a);
assert(a >= 10);
printf("输入的整数是:%d\n",a);
printf("请输入字符串:");
scanf("%s",&str);
assert(str != NULL);
printf("输入的字符串是:%s\n",str);
return 0;
}
结果是:
又如:
但是使用断言还是需要注意的地方:
1.可以在预计情况下程序不会到达的地方设置断言,比如(assert(0))
2.使用断言不要把所有条件用条件运算符连在一起,不然不知道是哪个条件出了问题
3.放在函数参数的入口处来检测传入参数的合法性
4.assert和后面语句应空一行,已形成逻辑与视觉上的一致性
5.不要使用改变环境变量的语句,比如assert(i ++ < 10)这样