Häufig ist es sinnvoll, während der Arbeit an einem Programm Zwischenergebnisse auf dem Bildschirm oder in ein Logfile auszugeben. Doch selbst wenn man den entsprechenden Code nicht jedesmal löscht und wieder einsetzt sondern nur aus- und einkommentiert, d.h. einen doppelten Slash (//) davor setzt oder nicht, kann es sehr aufwendig werden, zwischen der Version zum Debuggen und der normalen Version zu wechseln. Über eine Mischung aus bedingter Compilierung und Makro wie die folgende kann solcher Code komfortabel ein- und ausgeschaltet werden:
#ifdef __DEBUG__ #define DEBUG(code) code #else #define DEBUG(code) /* - */ #endif
Damit entscheidet die Tatsache, ob __DEBUG__ vor dieser Definition definiert war oder nicht darüber, ob z.B. folgender Code ausgeführt oder durch nichts ersetzt wird (Kommentare werden ignoriert):
DEBUG( cout<<"Initialisierung abgeschlossen."<<endl; )
Das Symbol kann dabei entweder direkt am Anfang des Quelltextes definiert werden, oder dem Compiler als Parameter übergeben werden. Dazu gibt es i.d.R. eine Option wie -dSYMBOL.