When you think you've found the bug you start tearing out debugging code, only to find you need to put it back in again. It is best to decide on names for debugging flags before you begin building your project so the names will be consistent. Preprocessor flags are traditionally distinguished from variables by writing them in all upper case. Check your local documentation for details. In some situations it is more convenient to turn debugging flags on and off during program execution, especially by setting them when the program starts up using the command line.
Large programs are tedious to recompile just to insert debugging code.
The chapter on the string class later in the book will show you how to do that. Although a debugging flag is one of the relatively few areas where it makes a lot of sense to use a global variable, there's nothing that says it must be that way. When writing debugging code, it is tedious to write print expressions consisting of a character array containing the variable name, followed by the variable. The preprocessor generates code that will test the assertion. If the assertion isn't true, the program will stop after issuing an error message telling you what the assertion was and that it failed.