news 2026/7/17 9:48:02

删死代码不是一行行找——从根节点往下砍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
删死代码不是一行行找——从根节点往下砍

一句话: 项目里堆了大量没人调的函数,分散各处一个一个删容易漏。正确做法:找到"根节点"——最上层入口函数有没有人调。根没人调→整条调用链都是死的,从根往下砍,每个节点确认无依赖再删。

适合谁读:适合嵌入式开发者、单片机初学者及遇到类似问题的工程师

为什么不能一个一个删

嵌入式项目迭代久了,会积累各种死代码:

  • 弃用的外设驱动(老芯片换掉了,但老驱动留着)
  • 开发中期加的测试功能(后来没用上,但忘了删)
  • 同事离职留下的半成品模块

如果看到就删、见一个删一个,容易出两个问题:

漏删:删了 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 # 应该只出现在注释里

改文件前关掉 IDE

IDE(Keil/IAR/VSCode)可能在后台重写项目文件。你改完一保存,IDE 从缓存恢复了原始内容。改之前关掉 IDE。


总结

步骤做什么
1grep -r找根节点(无人调用的最上层函数)
2画出调用链,根死了整链死
3从根往下逐层删,每层 grep 确认
4清理结构体字段、extern、include
5关 IDE,删完 grep 验证残留

死代码不一定是害,留着不会导致 bug。但删错了会。不确定的时候,宁愿留着。



有用的话点个收藏,下次调试直接用。有问题欢迎评论区交流,看到了都会回。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 9:47:05

Python自动化脚本:解决Selenium中Chrome与Chromedriver版本匹配难题

1. 项目概述:告别繁琐的手动操作 每次Chrome浏览器一更新,Selenium脚本就罢工,然后就得去官网手动找对应版本的Chromedriver——这个场景对做Web自动化测试或者数据抓取的朋友来说,简直太熟悉了。手动操作不仅打断工作流&#xff…

作者头像 李华
网站建设 2026/7/17 9:46:28

SiCMOSFET国产化进程与关键技术突破

1. SiCMOSFET国产化的行业背景与技术价值 碳化硅金属氧化物半导体场效应晶体管(SiCMOSFET)作为第三代半导体材料的代表,正在重塑功率电子行业的格局。与传统硅基器件相比,SiC器件具有三大突破性优势:击穿电场强度提升1…

作者头像 李华
网站建设 2026/7/17 9:45:00

GitHub中文界面终极指南:5分钟让GitHub全面中文化的完整教程

GitHub中文界面终极指南:5分钟让GitHub全面中文化的完整教程 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 还在为GitHub…

作者头像 李华
网站建设 2026/7/17 9:42:35

app测试同步练习题2(附答案)

单 下面哪些是云测试的优势? A. 完全免费 B. 任何时候都能做到有手机匹配的 C. 可以获取比较完整的测试报告 D. 能够随时与测试人员沟通 分析:C 是云测试的优势之一。云测试平台通常提供详细的测试报告。A错误,云测试通常不是完全免费的;B错误,云测试平台虽然设备多,但也…

作者头像 李华
网站建设 2026/7/17 9:42:21

STM32F103开发板实战:从入门到物联网应用开发

1. 正点原子精英V2开发板概览 作为正点原子STM32系列中的明星产品,精英V2开发板(型号STM32F103ZET6)是许多嵌入式开发者入门ARM Cortex-M3架构的首选平台。这块蓝色PCB的开发板搭载了72MHz主频的STM32F103ZET6芯片,拥有512KB Flas…

作者头像 李华
网站建设 2026/7/17 9:41:25

蓝速科技 AI 双屏翻译机:涉外服务跨语言沟通一站式落地指南

在涉外服务一线,语言障碍往往是阻碍业务推进的第一道关卡。无论是外贸批发市场的价格洽谈,还是酒店前台的入住指引,一旦沟通出现偏差,轻则导致客户体验下降,重则直接造成订单流失。传统模式下,工作人员往往…

作者头像 李华