将函数代码与预处理程序指令混合是一种不好的做法吗?

时间:2014-04-30 10:12:33

标签: c++ windows

在我的C ++项目中,我需要使用“测试模式”。

通常,有些进程需要由其他进程生成。因为调试由另一个应用程序启动的应用程序有点棘手,我需要这种测试模式,基本上分配一个控制台,模拟其他进程的存在,创建随机数据,因此不需要使用IPC设施。

我开始在代码中使用预处理程序指令,例如:

int APIENTRY _tWinMain(...) {
#ifdef TEST_MODE_ON
   AllocConsole();
   ...
#endif
...
#ifdef TEST_MODE_ON
   FreeConsole();
   ...
#endif
}

但我认为从代码可读性的角度来看,这不是最好的方法。这是一种不好的做法吗? (为什么?)还有其他更好的方法吗?谢谢!

2 个答案:

答案 0 :(得分:5)

这不是一个坏习惯,只是让代码更难以理解。我会使用类似于方法调用者宏的方法,这取决于TEST_MODE_ON评估其他内容:

#include <stdio.h>

#ifdef TEST_MODE_ON
#define DEBUG_CALL(x) x;
#else
#define DEBUG_CALL(x)
#endif

int main(int argc, char** argv) 
{
    DEBUG_CALL(printf("Hello"));
}

(是的,我知道它很丑陋且不安全,但仍有效)

当然,您的编译会负责定义TEST_MODE_ON

答案 1 :(得分:0)

这是解决此类问题的常用方法。这有点模式可读:

#ifdef TEST_MODE
// ...
#endif

正在定义TEST_MODE时推断它是ON