如何在运行时禁用COUT输出

How to disable cout output in the runtime?

本文关键字:COUT 输出 运行时      更新时间:2023-10-16

我经常在代码中许多不同的位置使用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,以控制其日志和调试消息的行为。