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

C++ on Linux - How do I #define a #ifdef / #endif debug conditional

本文关键字:#ifdef #endif 调试 条件 #define 如何 Linux C++      更新时间:2023-10-16

如果定义了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.这是否可能,如果可能,如何做?

您不能将#ifdef放在#define的替换部分中,但您可以在#ifdef/#endif中使用#define,如下所示:

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

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

有人说我可以创建一个 #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即可。