首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试宏与调试变量

调试宏与调试变量
EN

Stack Overflow用户
提问于 2016-01-11 18:35:49
回答 4查看 624关注 0票数 0

下面是使用调试变量的示例

代码语言:javascript
复制
class A{
 public:
  A(bool debug):m_debug(debug){};
  ~A(){};

  void Test(){
    for(int i=0;i<1000000;i++){
      // do something

      if(m_debug) print();
    }
  }

  void print(){
    std::cout << "something" << std::endl;
  }


 private:
  bool m_debug;
};

下面是使用调试宏预处理器的示例

代码语言:javascript
复制
#include "Preprocessor.h"

class A{
 public:
  void Test(){
    for(int i=0;i<1000000;i++){
      // do something

#ifdef DEBUG
        print();
#endif
    }
  }

  void print(){
    std::cout << "something" << std::endl;
  }
};

在前处理程序中,h只是简单的

代码语言:javascript
复制
#define DEBUG

使用调试变量的好处是该类对全局预处理器头的依赖减少了一个。宏方法的好处是,在运行时执行的if语句减少了1000000,这对于当每个fps都计算在内的图形应用程序来说可能是至关重要的。什么是更好的办法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-01-11 18:44:45

更好的方法是使用预处理器,但是不需要一个新的头文件来定义宏。

您可以在编译时设置标志,使用-DMACRO_NAME或在您的情况下使用-DDEBUG

票数 5
EN

Stack Overflow用户

发布于 2016-01-11 19:01:09

只要任务是打印调试信息,先例就是像Visual那样使用宏(调试/发布构建)。然而,在Qt世界中,有类QLoggingCatagory可以启用/禁用日志记录部分。每次消息被注销时,它都会调用函数QLoggingCategory::isDebugEnabled(),这使我认为它不是性能的主要问题,至少对于正常使用来说是这样。

也就是说,如果我们将Visual应用程序与Qt应用程序结合起来,MFC应用程序的照明速度很快。这至少在一定程度上是因为它使用了宏,而且在调试和发布构建时可以很容易地注意到这种差异,其中宏/ debug信息是主要的区别。

鉴于所有这些证据,在您的情况下,我投票赞成宏方法,以获得最大的性能。

票数 1
EN

Stack Overflow用户

发布于 2016-01-11 18:58:25

另一种选择是,如果您不喜欢一堆#ifdef DEBUG / #endif行,您可以创建一个宏,如果定义了它的参数,就会输出它的参数(非常像assert宏)。

代码语言:javascript
复制
#ifdef DEBUG
#define PRINT(x) (x)
#else
#define PRINT(x)
#endif

PRINT( std::cout << "something" << std::endl );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34728606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档