In my C++-code there are several fprintf-statements, which I have used for debugging. Since I might need them again, I would prefer not to comment them out for the moment.
However, I need the execution of the program to be fast, so I would like to avoid them being printed out, as they are for the moment (I redirected stderr to a file).
Preferably this would be determined by the user passing an argument to the program, which I would extract like this:
main (int argc, char *argv[])
{
int isPrint=0;
if (argc > 1 ) {
isPrint = atoi ( argv[2]);
}
}
I thought of renaming fprintf to another name, and then from that function do a fprintf-call using the same parameters, based on the value of isPrint; however, then I realized that fprintf can have so many different kind of arguments and a various number of arguments; and that I don’t know any generic way of declaring my own function with those requirements.
So I wonder how to create a function,which works exactly like fprintf, but which takes the extra parameter isPrint; or how to solve the above problem in another way.
Complementary information after first post:
One solution would be to add this before each fprintf-statement:
if (isPrint == true )
First note that if this is just for debugging, I’d agree that the typical way is to use macros or preprocessor defines to tell the compiler to include logging or not.
However, if you don’t want it removed entirely by the compiler (so that you can turn the printing on or off with an argument), you could write your own log function that takes
isPrintand some string, and then usesnprintf()to format the string before you call it.Something along these lines:
It may also be possible to wrap
fprintf()in your own varags function, but that would be more complicated.