It’s customary to use output statements as a debugging aid. For example, displaying the name of a function that is currently in scope or printing a variable’s value on the screen. These statements are automatically removed from the release version of the application by macro magic. For example:
void func() { int n; n = sqrt(n); #ifdef DEBUG // code below exists only in debug version cout <<"value of n: "<< n << endl; #endif }
Seemingly, the statements enclosed in #ifdef macros don't incur any overhead in the release version because the preprocessor removes them when the symbol DEBUG isn't defined. However, programmers often forget to enclose the #include
#ifdef DEBUG // only in debug mode #include // not included in release version #endif int main() { func(); }