是否有任何方法可以从Release版本中删除一行代码,但是在没有丑陋的#if
语句的情况下将其保留在Debug构建中?
例如,有没有办法在不使用所有这些if语句的情况下实现以下代码的等效?
#if DEBUG
Log.Log("I am in debug mode");
#endif
如果我在Log.Log
函数中进行了条件运行时检查,则字符串“我处于调试模式”将保留在我编译的可执行文件中,这正是我不要想要。
答案 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
}
}