如何在发布模式下自动注释行?

Pie*_*ro2 2 c++ debugging release release-mode c-preprocessor

我需要在调试模式下将某些代码行"激活",并在发布模式下忽略.有没有办法做这样的事情:

#include <iostream>
using namespace std;

#ifdef _TEST_
#define _cerr cerr
#else
#define _cerr // cerr
#endif

int main() {
   _cerr << "TEST message" << endl;
}
Run Code Online (Sandbox Code Playgroud)

因此,当_TEST_未定义时,会对某些行进行注释或从代码中删除.我知道评论是在其余的之前处理的,所以这段代码是错误的.但是,如何在不明确使用#ifdefs的情况下获得我需要的行为?

rek*_*o_t 9

您可以使用宏:

#ifdef _TEST_
#define DEBUG_ONLY(x) x;
#else
#define DEBUG_ONLY(x)
#endif

int main() {
    DEBUG_ONLY(cerr << "TEST message" << endl)
}
Run Code Online (Sandbox Code Playgroud)

  • 不在宏中添加分号会使您的代码更像C++(强制用户在`DEBUG_ONLY`子句后添加`;`) (4认同)

Rob*_*ton 5

如果您所使用的是在发布版本中删除的调试日志记录,您可以执行以下操作:

#ifdef _TEST_
#define LOG(x) (cerr << x << endl)
#else
#define LOG(x)
#endif

...

int main() {
    LOG("TEST message");
}
Run Code Online (Sandbox Code Playgroud)