【发布时间】:2015-11-13 02:27:03
【问题描述】:
我的程序使用了许多 #ifdef _DEBUG_ ... #endif 块,以取消发布版本的调试功能。
但是,它会堵塞代码,使代码难以阅读。
有没有更好的办法?
我能想到的一种方法是通过将函数定义为空来使其无效,例如:
#ifdef _DEBUG_
void foo(int bar)
{
do_somthing();
}
#else
#define foo(a) do {; } while(0)
#endif
所以我们只有一个#ifdef _DEBUG_ ... #endif。所有调用foo()的地方,我们不用加上#ifdef _DEBUG_ ... #endif。
但是,也有例外:
- 当调试函数有返回值时,上述策略将不起作用。例如调用函数的代码可能是这种模式:
bar = foo(); - 当调试函数是类的成员函数形式时,同样,上述策略将不起作用。
有什么想法吗?
【问题讨论】:
-
看这个:stackoverflow.com/questions/14251038/debug-macros-in-c - 在 GNU C 库中,
assert()被实现为一个宏,当NDEBUG被定义时它变成一个 noop。您可以查看该代码,以获得至少部分问题的经过合理测试的可移植解决方案。 -
另见C
#definemacros for debug printing,它主要适用于 C++,但如果需要,也可以修改建议以利用 C++ 特性。
标签: c++