c++ - C++中的仅调试ostreams?

标签 c++ debugging iostream

我已经为调试输出实现了一个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/

相关文章:

c++ - 为什么图像像素要平铺在内存中的WORD单元中?

c++ - 带双括号的 C++ if 语句有什么作用?

c# - ArgumentException 标识符 ' ' 不符合 CLS。关于连载

java - 为什么 VSCode 在调试时数组显示奇怪的 "@number"(如 int[10]@9)?

c++ - 检查是否在 Windows 控制台中按下了键

python - 将 Python 代码反汇编为字典

c++ - 尝试从 cin 获取输入时陷入循环

c++ - 文件流 tellg/tellp 和 gcc-4.6 这是一个错误吗?

c++ - 在 C++ 流中包装 C 风格的文件

c++ - ASCII 格式的 MPI 并行 IO(我该怎么做?)