如何在运行时禁用COUT输出
How to disable cout output in the runtime?
我经常在代码中许多不同的位置使用cout
进行调试,然后我感到沮丧并手动评论所有这些。
有没有办法在运行时抑制COUT输出?
,更重要的是,假设我想抑制所有cout
输出,但是我仍然希望在终端中看到1个特定的输出(假设程序的最终输出)。
是否可以使用打印到终端的"其他方式"以显示程序输出,然后在压制COUT时仍然看到使用此"其他方式"打印的内容,
当然,您可以(示例此处):
int main() {
std::cout << "First message" << std::endl;
std::cout.setstate(std::ios_base::failbit);
std::cout << "Second message" << std::endl;
std::cout.clear();
std::cout << "Last message" << std::endl;
return 0;
}
输出:
First message
Last message
这是因为将流在fail
状态下将其静静地丢弃任何输出,直到清除故障。
supress输出,您可以将基础缓冲区与COUT断开连接。
#include <iostream>
using namespace std;
int main(){
// get underlying buffer
streambuf* orig_buf = cout.rdbuf();
// set null
cout.rdbuf(NULL);
cout << "this will not be displayed." << endl;
// restore buffer
cout.rdbuf(orig_buf);
cout << "this will be dispalyed." << endl;
return 0;
}
不要使用 cout
进行调试目的,而是定义呼叫到它的其他对象(或函数或宏),然后您可以在一个地方禁用该函数或宏。
您可以用户cerr
-用于调试目的的错误输出流。
另外,还有clog
-记录的标准输出流。
通常,它们的行为就像cout
。
示例:
cerr << 74 << endl;
详细信息:http://www.cplusplus.com/reference/iostream/cerr/
http://www.cplusplus.com/reference/iostream/clog/
如果包括涉及 cout
的文件,则可能需要在开始(Main之外)编写代码,可以这样做:
struct Clearer {
Clearer() { std::cout.setstate(std::ios::failbit); }
} output_clearer;
似乎您打印了调试消息。您可以在Visual C /MFC中使用跟踪,或者您可能想创建一个Debug()
功能,以照顾它。您只有在设置一个不同的标志时才能实现它才能打开。许多程序都使用命令行参数,例如verbose
或-v
,以控制其日志和调试消息的行为。
相关文章:
- std::cout输出int时出现编译错误
- 为什么'std::cout << !+2 '输出 0?
- 在视觉工作室中以十六进制进行位移位并通过 cout 输出
- 为什么cout输出内存地址不是字符串?
- 如何在c++中将方法的cout输出输出到流文件中
- cout 输出乱码消息行,而不是实际用户的 cout 语句
- 如何在运行时禁用COUT输出
- bool:不正确的cout输出,而不是0或1
- "cout << cout" - 输出代表什么?
- Xcode调试器未显示C++cout输出
- 为什么 std::cout 输出溢出
- 为什么我的 cout 输出没有立即显示
- 在C++中格式化 Cout 输出
- 是否可以在C++中的文件中显示void函数cout输出
- 同步STD cout输出多线程
- 用visual studio和C++/OpenGL进行cout输出
- std::cout输出直到程序结束才打印
- 如何在非控制台应用程序中看到cout输出?
- 使用SDL时没有从cout输出
- 为什么std::cout输出在发送NULL后完全消失?