在 Linux 上C++ - 如何 #define #ifdef/#endif 调试条件
C++ on Linux - How do I #define a #ifdef / #endif debug conditional
如果定义了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
即可。
相关文章:
- #ifdef和未声明的标识符
- C++ Macros #ifdef
- #if 如何工作?我误解了 #if~#endif 的形式吗?
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 更新 #ifdef 中的现有变量值?
- 使用 constexpr 替换 #define 和 #ifdef 进行条件编译
- 使用 #ifdef 时的多个定义
- 使用 [#define & #ifdef] 跨文件激活代码块
- 以下 OpenCV 源代码中是否存在错误?(#ifdef 没有 #else)
- 有C++标准库 ifdef 或 ifndef 预处理器指令吗?
- C++预处理器同时执行#ifdef和#ifndef
- SFINAE-based ifdef
- 已经在 .obj 中定义,即使有 #ifndef #define #endif
- 如何编写函数来替换 #ifdef 和 #endif 对
- C++类,对 #ifdef,#define 和 #endif 的守卫混乱
- 如何让 emacs 像'{'和 '}' 一样对待 #ifdef 和 #endif?
- 放置 #ifdef __cplusplus 外置"C"的最佳位置在哪里{#endif
- 是否可以模拟将#ifdef放置在另一个#ifdef #endif中的效果?
- #ifdef / #ifndef and #endif
- 在 Linux 上C++ - 如何 #define #ifdef/#endif 调试条件