Linux上的C ++ - 如何#define #ifdef / #endif调试条件

时间:2015-05-26 23:11:47

标签: c++ debugging logging c-preprocessor

如果定义了DEBUG,我想跟踪我的代码,如下面的#ifdef代码块所示:

#ifdef DEBUG
    OP_LOG(debug) << "SEQUENCE:  " __FILE__ << "::" << __FUNCTION__;
#endif

有人说我可以使用#define,这样上面的三行只会是一行。这是我能够找到它的最接近的,但它无条件地提供跟踪输出,无论是否定义了DEBUG

#define DEBUG_TRACE(note) OP_LOG(debug) << "SEQUENCE :  " << __FILE__ <<"::" <<__FUNCTION__ << note

我不知道如何制作条件#define。这是可能的,如果是的话,怎么做?

2 个答案:

答案 0 :(得分:5)

您无法将#ifdef放入#define的替换部分,但 可以使用内的#define #ifdef / #endif阻止,如下:

#ifdef DEBUG
#define DEBUG_TRACE(note) ... // put your debug code here
#else
#define DEBUG_TRACE(note)
#endif

#else案例中,如果未定义DEBUG_TRACE,则定义DEBUG展开为空。

答案 1 :(得分:3)

  

有人说我可以创建一个#define,所以上面三行只会是一行。

不是我听说过的。我最喜欢的方法是

#ifdef DEBUG
#define DEBUG_LOG OP_LOG(debug) << "SEQUENCE:  " __FILE__ << "::" << __FUNCTION__;
#else
#define DEBUG_LOG
#endif

这样,只有在设置-DDEBUG时才需要记录DEBUG_LOG。

它的工作方式:

查看#ifdef#else#endif声明。我们将DEBUG_LOG定义为在未设置-DDEBUG时展开为空,如果是OP_LOG(debug) << "SEQUENCE: " __FILE__ << "::" << __FUNCTION__;则展开为-DDEBUG。这样您以后就不必担心DEBUG_LOG,只需要在跟踪调用时使用\r\n