用C / C ++调试:调用空函数的代价

时间:2012-04-16 09:02:39

标签: c++ c debugging

实现调试的一个常规过程是使用

#ifdef DEBUG

...debugging tests...

#endif

有时,代码的某些部分需要典型的“检查”算法,因此人们通常希望将其包装在函数上,这样只有在定义了DEBUG标志时才调用代码。让该函数称为myDebug();

我看到两种自然的方法:每次调用myDebug()时都会添加ifdef,如下所示:

#ifdef DEBUG

myDebug();

#endif

或myDebug定义为:

void myDebug()
{
#ifdef DEBUG

...code...

#endif
}

基本上,第一个避免函数调用,而第二个避免使用大量#ifdef /#endif代码。

是否有任何“标准”惯例可以选择其中一种,或另一种我不知道的方式?是否值得从“造型”的角度来选择第二个?

由于

1 个答案:

答案 0 :(得分:8)

我会选择第3名:

#ifdef DEBUG
#define myDebug(x) myDebug(x)
#else
#define myDebug(x) {}
#endif

这样,代码中到处都没有令人讨厌的#ifdef,对于非调试版本,不会生成任何代码。