这是一个奇怪的问题,所以我必须提供一些背景知识。我有一个我正在研究的C++项目,我想清理一下。我正在处理的主要问题使我想要陷入大规模滥用项目核心组件中使用的预处理器宏。在编译和使用该程序以切换不同算法的使用之前,有一个文件带有一堆#define
,它们被注释/取消注释。我宁愿有命令行参数来做这件事,而不是每次我们想尝试不同的算法时重新编译。问题是整个代码中有太多的#ifdef
交织在一起,似乎不可能简单地重构每个算法的代码。清除预处理宏
我被告知这背后的原因是,这应该是一个实时系统,将处理毫秒单位的时间,并且此组件中的代码被调用了很多次, if
支票将对我们的表现造成不利影响。如果您想尝试其他算法,则必须设置适当的标志并重新编译,以便优化性能。
所以我对你所有的问题是这样的:
有没有办法,我可以摆脱这些宏的任何方式,而不是用命令行参数没有重击性能和无需再处理逻辑和码?
我正在考虑的其中一个选项是试图为每种可能的算法组合定义此组件的版本,然后选择由所提供的命令行参数组合定义的版本。但根据我的朋友,组合的数量太多了,这是可行的。我自己并没有计算出这些数字,但考虑到他在这些代码中投入了多少工作量,我会认真听取他的意见。
你的朋友可能是对的。假设你有n个切换点,每个切换点都有m个不同的状态,你必须创建的“性能”构建的数量为m^n。对于任何不平凡的数字,这也被称为“比你能适应澳大利亚更多”。 – Borealid 2010-07-14 01:50:16
哈哈,我想尽可能多,但这是最简单的解决方案,我可以看到这将使大部分代码保持完好。但我也绝对希望它能够适应澳大利亚。 :P – MKA 2010-07-14 03:26:05
对不起,如果我误解你的问题,但如果程序启动时间不关键,你总是可以做一个包装,实际上用选定的算法构建程序并启动它。 对代码清理并没有什么帮助,但:-((看一下编译器缓存或ccache) – MattBianco 2010-07-14 08:33:59