断言Assert
断言的用处就是入口参数过滤,参数可控。用法:
1定义枚举变量限定参数范围:
typedef enum{
参数1=x1,\
参数2=x2,\
............,\
参数n=Xn
}变量_typedef;
2 宏定义:
#define IS_函数名_ok(参数) (((参数)==参数1)||\
((参数)==参数2)||\
.............................
((参数)==参数n))
在"头文件.h"中定义以上内容,并做函数声明;然后在调用模块中包含该头文件并定义函数原型
3 void 函数名(变量_typedef 参数){
assert_param( IS_函数名_ok(参数)) ;
//函数体
}
4 全局中有以下宏定义
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
void assert_failed(u8* file, u32 line) {
//User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
while (1)
{
}
}
因此用断言进行入口参数检查按照以上的宏逐次被展开,如果入口参数在枚举变量中没有定义过就会报错。清晰明了。必须指出并非所有的函数都有如此,这些只对于那些重要的函数参数配置才用这个。比如波特率的选择等。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?