【发布时间】:2014-12-11 15:12:19
【问题描述】:
我在一个 C++ 程序中有输出,我只想查看是否在运行时指定了“详细”选项。我发现很多方法可以在编译时使用预处理器 #define 语句来控制调试输出,但是除了将每个 cout 包装在 if(verbose) 中之外,我找不到任何在运行时执行此操作的方法。
在伪代码中,我想转换:
if(verbose)
cout << "Some text: " << variable << endl;
...
if(verbose)
cout << "Other text: " << var << endl;
进入:
if(verbose)
//block cout
cout << "Some text: " << variable << endl;
cout << "Other text: " << var << endl;
有没有办法在运行时选择性地重新定义 cout 以便这些行静默不打印任何内容?更好的是一种更灵活的方法,允许某些输出同时阻止其他输出。
【问题讨论】:
-
cout是字符输出,区别于wcout(宽字符输出)。它不是“控制台”。不要将标准输出与 tty 混为一谈。 -
@WilliamPursell 我不完全理解你所做的区分。这是一个在终端中运行的程序,任何 cout 语句都出现在终端中(我理解为标准输出)。问题应该以“我有 tty 输出...”开头吗?
-
您的问题涉及“控制台输出”。但是,除非您错误地认为 stdout 是控制台,否则代码中的任何地方都与“控制台”无关。我指出认为 stdout 是控制台是错误的。
-
@jake 这取决于系统。至少在 Unix 和 Windows 下,无论程序在哪里运行,都无法保证
std::cout会进入控制台;两个系统都支持管道和重定向。