下面是使用调试变量的示例
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;
};下面是使用调试宏预处理器的示例
#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只是简单的
#define DEBUG使用调试变量的好处是该类对全局预处理器头的依赖减少了一个。宏方法的好处是,在运行时执行的if语句减少了1000000,这对于当每个fps都计算在内的图形应用程序来说可能是至关重要的。什么是更好的办法?
发布于 2016-01-11 18:44:45
更好的方法是使用预处理器,但是不需要一个新的头文件来定义宏。
您可以在编译时设置标志,使用-DMACRO_NAME或在您的情况下使用-DDEBUG。
发布于 2016-01-11 19:01:09
只要任务是打印调试信息,先例就是像Visual那样使用宏(调试/发布构建)。然而,在Qt世界中,有类QLoggingCatagory可以启用/禁用日志记录部分。每次消息被注销时,它都会调用函数QLoggingCategory::isDebugEnabled(),这使我认为它不是性能的主要问题,至少对于正常使用来说是这样。
也就是说,如果我们将Visual应用程序与Qt应用程序结合起来,MFC应用程序的照明速度很快。这至少在一定程度上是因为它使用了宏,而且在调试和发布构建时可以很容易地注意到这种差异,其中宏/ debug信息是主要的区别。
鉴于所有这些证据,在您的情况下,我投票赞成宏方法,以获得最大的性能。
发布于 2016-01-11 18:58:25
另一种选择是,如果您不喜欢一堆#ifdef DEBUG / #endif行,您可以创建一个宏,如果定义了它的参数,就会输出它的参数(非常像assert宏)。
#ifdef DEBUG
#define PRINT(x) (x)
#else
#define PRINT(x)
#endif
PRINT( std::cout << "something" << std::endl );https://stackoverflow.com/questions/34728606
复制相似问题