【发布时间】:2013-04-30 01:52:32
【问题描述】:
由于需求来回变化,我们的代码中有一些使用 const 的 if/else 块,例如:
const bool DisplayAverageValues = true;
if(DisplayAverageValue)
{
// Do this
}
else
{
// Do that
}
由于要求可能会再次发生变化,我们不想删除当前未使用的代码 - 下周可能需要它。我们也不想注释掉未使用的代码,因为我们希望它成为任何重构的一部分。只需更改布尔值,它就可以随时进行编译。
问题是我们收到了无法访问代码的警告,所以我正在考虑用预处理器 #if/#else 替换标准 if/else 块。
#define DisplayAverageValues
#if DisplayAverageValue
// Do this
#else
// Do that
#endif
我现在面临的问题是预处理器符号不能设置为 false,它只能定义或未定义。从以下位置更改会更明显:
#define DisplayAverageValues true
到
#define DisplayAverageValues false
而不是
#undef DisplayAverageValues
或
//#define DisplayAverageValues
(如果在其他地方使用了相同的符号名称,可能会导致麻烦)。
有没有更好的办法?
【问题讨论】:
-
预处理器选项听起来最好的 IMO。评论
define行还不错。只需整理好所有defines 的写作位置即可。 -
我不确定#define 的问题?看起来不错的海事组织。
-
标准方法是使用
#if SYMBOL ... #endif,然后在您的项目设置中定义(或不定义)SYMBOL(因此不涉及评论。) -
我会尝试将这些不同的部分提取到基于配置设置动态加载的strategies 中。这将完全接受快速变化的需求,而不是试图解决它们。
-
选项 #2:在编码之前明确要求 :)(哦,在你做的时候要一匹小马。)
标签: c# c-preprocessor