【问题标题】:C++ on Linux - How do I #define a #ifdef / #endif debug conditionalLinux 上的 C++ - 我如何 #define #ifdef / #endif 调试条件
【发布时间】:2015-08-08 20:01:41
【问题描述】:

如果定义了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。这可能吗?如果可以,该怎么做?

【问题讨论】:

    标签: c++ debugging logging c-preprocessor


    【解决方案1】:

    您不能将#ifdef 放在#define 的替换部分,但您可以使用#define 在内部 #ifdef/@987654325 @块,像这样:

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

    #else 的情况下,如果DEBUG 未定义,这会将DEBUG_TRACE 定义为空。

    【讨论】:

      【解决方案2】:

      有人说我可以创建一个#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) &lt;&lt; "SEQUENCE: " __FILE__ &lt;&lt; "::" &lt;&lt; __FUNCTION__;。这样您以后就不必担心-DDEBUG,您只需在要进行跟踪调用时使用DEBUG_LOG

      【讨论】:

        猜你喜欢
        • 2010-12-20
        • 2014-10-16
        • 1970-01-01
        • 1970-01-01
        • 2011-07-31
        • 1970-01-01
        • 2011-12-04
        • 1970-01-01
        • 2010-11-12
        相关资源
        最近更新 更多