4.命名区分
- 单纯静态硬件引脚数组→ 优先
s_led_table绝大多数单片机点灯工程都是静态配置表,语义直观,行业通用。 - 有动态注册、链表管理、运行时挂载 LED 设备→ 用
s_led_registry大型 RTOS 项目、多模块可插拔驱动才会用 registry。
3.编译宏
const char compile_info[] = "Compiled on " __DATE__ " at " __TIME__;
__DATE__就是编译宏,
1.编译宏是编译器自带的,不用#define,
2.编译时替换:不是运行时计算,编译完就固定了
3.通常前后都有两个下划线__XXX__,
4.全平台通用
常用的编译宏:
__DATE__ // 编译日期,如 "Mar 27 2025"
__TIME__ // 编译时间,如 "21:45:30"
调试定位宏(打印报错位置神器)
__FILE__ // 当前文件名字符串
__LINE__ // 当前行号(数字)
__func__ // 当前函数名
2.哈希表
哈希表有两种形式,一种是线性探索表,另一种是拉链表/哈希桶。
采用的取余法进行数据的放置,但会发生哈希冲突,冲突过多的时候需要根据负载因子进行扩容。
使用哈希可以把时间复杂度控制在O(n)的量级。
参考文献:通俗易懂->哈希表详解-CSDN博客
1.数据结构——栈
栈跟数组比,相当于一个更高级的工具,那为什么c语言里只有数组而没有栈呢,因为数组是原生语法,有语言内置的连续内存分配机制,而栈是逻辑概念,c语言虽未将其作为语言特性,但栈本质上也是线性表,也可以通过数组+指针模拟实现。
共享栈空间