How to disable cout output in the runtime?

前端 未结 5 1111
臣服心动
臣服心动 2020-12-14 08:52

I often use cout for debugging purpose in many different places in my code, and then I get frustrated and comment all of them manually.

Is there a way

相关标签:
5条回答
  • 2020-12-14 08:53

    It seems you print debug messages. You could use TRACE within Visual C++/MFC or you just might want to create a Debug() function which takes care of it. You can implement it to turn on only if a distinct flag is set. A lot of programs use a command line parameter called verbose or -v for instance, to control the behavior of their log and debug messages.

    0 讨论(0)
  • 2020-12-14 08:55

    You can user cerr - standard output stream for errors for your debug purposes.

    Also, there is clog - standard output stream for logging.

    Typically, they both behave like a cout.

    Example:

    cerr << 74 << endl;
    

    Details: http://www.cplusplus.com/reference/iostream/cerr/

    http://www.cplusplus.com/reference/iostream/clog/

    0 讨论(0)
  • 2020-12-14 09:05

    To supress output, you can disconnect the underlying buffer from 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;
    }
    
    0 讨论(0)
  • 2020-12-14 09:06

    Don't use cout for debugging purposes, but define a different object (or function, or macro) that calls through to it, then you can disable that function or macro in one single place.

    0 讨论(0)
  • 2020-12-14 09:16

    Sure, you can (example here):

    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;
    }
    

    Outputs:

    First message
    Last message
    

    This is because putting the stream in fail state will make it silently discard any output, until the failbit is cleared.

    0 讨论(0)
提交回复
热议问题