【问题标题】:Is there an automagic tool to refactor / remove some conditionals from a large C code base?是否有自动工具可以从大型 C 代码库中重构/删除一些条件?
【发布时间】:2014-07-11 09:33:38
【问题描述】:

我们继承了一个庞大的 C 代码库,在将其中的所有模块更新到新框架的过程中,我们创建了很多 #ifdef FOO 和 #ifndef FOO 以便我们可以将新框架与旧框架并行运行以进行测试。

现在我们已经结束了测试阶段并且已经完成了我们的第一个版本,我们希望正式删除所有遗留代码(当定义 FOO 时)。

我知道 C 预处理器的输出,这在这种情况下没有用,因为我不希望扩展所有宏并包含所有头文件,所以请不要回复建议我们使用它。

我们想要一个工具,它可以获取一个目录和所有子目录,并处理其中的所有文本文件,以删除所有定义 FOO 的 #if #else 情况,同样保留未定义 FOO 的情况,删除整个 #if/#else 语句。

我认为这是一项非常常见的重构任务,而且需要大量的体力劳动(不过对于工具来说很容易!),所以如果有人知道什么,请告诉我!

【问题讨论】:

  • 如果FOO的定义或未定义状态在不同的文件中发生变化,那么这个问题听起来并不“容易”。变化从何而来?某些文件中是否有 #define FOO 预处理器指令?
  • FOO 永远不会改变,它由 makefile 控制。而且它永远不会在我们的项目中重新定义。

标签: c refactoring preprocessor


【解决方案1】:

你试过 linuxes "unifdef" 命令行工具吗?您必须对 shell 进行一些调整才能使其递归工作

【讨论】:

    【解决方案2】:

    Clang 格式几乎与您将获得的一样接近。它将清理代码的间距和布局,因此您不会从一大堆文本开始,但这就是它可以为您做的所有事情,因为变量名称、常量等都从人类那里获得了它们的含义;没有程序能读懂你的想法。

    【讨论】:

      猜你喜欢
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多