看Qt源码中的小技巧

2020-05-28 21:01:46 浏览数 (1)

我们需要屏蔽qDebug的打印可以在pro文件中定义DEFINES =QT_NO_DEBUG_OUTPUT,即可屏蔽其输出。本文将介绍QT_NO_DEBUG_OUTPUT宏的实现和使用到的一个小技巧。

源码

  Qt 5.12.1源码中QT_NO_DEBUG_OUTPUT宏实现:

代码语言:javascript复制
#define QT_NO_QDEBUG_MACRO while (false) QMessageLogger().noDebug

#if defined(QT_NO_DEBUG_OUTPUT)
#  undef qDebug
#  define qDebug QT_NO_QDEBUG_MACRO
#endif

  上面看起来代码有点多,我们再看看Qt4版本下QT_NO_DEBUG_OUTPUT宏的实现:

代码语言:javascript复制
#ifdef QT_NO_DEBUG_OUTPUT
#  define qDebug while(false) qDebug
#endif

效果

  当我们定义了QT_NO_DEBUG_OUTPUT宏,qDebug就会被替换为:

代码语言:javascript复制
while(false) qDebug

例子

  假设有以下代码:

代码语言:javascript复制
qDebug() << "Hello world!";

  那么定义了QT_NO_DEBUG_OUTPUT宏后语句将会被替换为:

代码语言:javascript复制
while(false) qDebug() << "Hello world!";

  上述操作将永远执行不了qDebug函数,等于禁用了qDebug打印。这一技巧非常巧妙,值得学习。

0 人点赞