我已经为调试输出实现了一个ostream
,它最终将调试信息发送到OutputDebugString
。它的典型用法如下所示(其中 debug
是一个 ostream 对象):
debug << "some error\n";
对于发布版本,不输出这些调试语句的最痛苦和最高效的方法是什么?
最佳答案
最常见(当然也是最高效)的方法是使用预处理器删除它们,使用类似这样的东西(最简单的实现):
#ifdef RELEASE
#define DBOUT( x )
#else
#define DBOUT( x ) x
#endif
你可以说
DBOUT( debug << "some error\n" );
编辑:你当然可以让 DBOUT 更复杂一点:
#define DBOUT( x ) \
debug << x << "\n"
允许更好的语法:
DBOUT( "Value is " << 42 );
第二种选择是将 DBOUT 定义为流。这意味着您必须实现某种空流类 - 参见 Implementing a no-op std::ostream .但是,这样的流在发布版本中确实存在运行时开销。
关于c++ - C++中的仅调试ostreams?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2571157/