仅在发布版本中删除功能

时间:2011-09-19 23:13:35

标签: c++

是否有任何方法可以从Release版本中删除一行代码,但是在没有丑陋的#if语句的情况下将其保留在Debug构建中?

例如,有没有办法在不使用所有这些if语句的情况下实现以下代码的等效?

#if DEBUG
    Log.Log("I am in debug mode");
#endif

如果我在Log.Log函数中进行了条件运行时检查,则字符串“我处于调试模式”将保留在我编译的可执行文件中,这正是我不要想要。

3 个答案:

答案 0 :(得分:7)

在公共共享标头中定义另一个宏。

#ifdef DEBUG
#define LOG(m) Log.Log(m);
#else
#define LOG(m) do {} while(false);
#endif

然后将Log.Log的来电替换为LOG

答案 1 :(得分:1)

你最终需要一个预处理器条件,但如果你想保持应用程序代码干净,你可以在某些共享头中“上游”应用它。在这种情况下,你会有像

这样的东西
#if DEBUG
   #define DebugLog(m) Log.Log(m);
#else
   #define DebugLog(m)
#endif
在与Log关联的标头中的

,而不是在应用程序代码中的条件预处理器内调用Log.Log(m),而只需调用DebugLog(m)。在Debug构建中,宏将扩展为Log.Log(m),否则它将完全消失。

答案 2 :(得分:0)

根据构建版本设置Log.Log函数#ifdef。因此在DEBUG中,它记录了东西,而在RELEASE中,它是一个无操作。例如:

namespace Log
{
  void Log()
  {
  #if DEBUG
    //Insert logging code here.
  #endif
  }
}