【发布时间】: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