一句话: 项目里堆了大量没人调的函数分散各处一个一个删容易漏。正确做法找到根节点——最上层入口函数有没有人调。根没人调→整条调用链都是死的从根往下砍每个节点确认无依赖再删。适合谁读适合嵌入式开发者、单片机初学者及遇到类似问题的工程师为什么不能一个一个删嵌入式项目迭代久了会积累各种死代码弃用的外设驱动老芯片换掉了但老驱动留着开发中期加的测试功能后来没用上但忘了删同事离职留下的半成品模块如果看到就删、见一个删一个容易出两个问题漏删删了 A 函数但 A 调用的 B/C/D 三个函数没发现留了一堆无主代码。误删删了 A但 A 其实在另一个文件里被调用了只是你没搜到。正确方法从根往下砍第一步找根节点——谁都没调的最上层函数# 对每个可疑的函数搜有没有人调它 grep -r PWM_Config *.c # 只在定义处出现→ 根节点 grep -r Set_PWM *.c # 只在 PWM_Config 里调→ 子节点第二步画调用链PWM_Config() ← 无人调用 → 整条链死 └→ Set_PWM() ← 仅 PWM_Config 调 └→ Timer_Config() ← 仅 Set_PWM 调 └→ NVIC_Config() ← 仅 Timer_Config 调根死了整棵树都是死的。不需要单独验证每个子节点。第三步从根往下删每层确认// 删 PWM_Config → 搜一遍确认只剩定义和调用 → 删 // 删 Set_PWM → 搜一遍确认只剩定义和调用 → 删 // 删 Timer_Config → ...每删一个grep确认一次——有人调就停没人调就继续。第四步清理连带的东西死函数删完后连带要删的在哪结构体里只在死代码中用的字段.h文件extern声明.h文件#include死代码专用的头文件.c文件开头中断向量表里死函数注册的条目启动文件踩过的坑大文件别用 sed 按行号删死代码和活跃代码可能交错在一起。sed 一刀切容易把活跃代码也干掉。# 危险死代码和活跃代码在同一个文件里交错 sed -i 100,200d driver.c # 可能切掉了活函数用函数名匹配不要用行号。# 安全先用 grep 确认范围再精确删除 grep -n DeadFunc driver.c # 确认行号 # 然后只删这个函数不是一段行号删完验证残留# 删完后确认没有残留引用 grep -r DeadFunc *.c *.h # 应该只出现在注释里改文件前关掉 IDEIDEKeil/IAR/VSCode可能在后台重写项目文件。你改完一保存IDE 从缓存恢复了原始内容。改之前关掉 IDE。总结步骤做什么1grep -r找根节点无人调用的最上层函数2画出调用链根死了整链死3从根往下逐层删每层 grep 确认4清理结构体字段、extern、include5关 IDE删完 grep 验证残留死代码不一定是害留着不会导致 bug。但删错了会。不确定的时候宁愿留着。有用的话点个收藏下次调试直接用。有问题欢迎评论区交流看到了都会回。