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