C语言拾遗之断言(assert)

今天在研究恩智浦杯某大学直立程序的时候,发现他们用断言来检测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;
 } 

结果是:

又如:

 

扫描二维码关注公众号,回复: 8675386 查看本文章

但是使用断言还是需要注意的地方:

 1.可以在预计情况下程序不会到达的地方设置断言,比如(assert(0))

2.使用断言不要把所有条件用条件运算符连在一起,不然不知道是哪个条件出了问题

3.放在函数参数的入口处来检测传入参数的合法性

4.assert和后面语句应空一行,已形成逻辑与视觉上的一致性

5.不要使用改变环境变量的语句,比如assert(i ++ < 10)这样

发布了64 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40839934/article/details/98241897