Wenn fertig, bitte Fenster schließen

Makro Definitionen

Die dritte und letzte Form der #define-Anweisung definiert ein Makro. Ein Makro ist im Prinzip nichts anderes als eine Kurzschreibweise für beliebige C++ Anweisungen. Trifft der Präprozessor auf den Namen eines solchen Makros, so wird dieser durch die bei der Makrodefinition angegebenen Anweisungen ersetzt. Erstrecken sich die Anweisungen eines Makros über mehrere Zeilen, so sind die Zeilen jeweils mit einem Backslash-Zeichen abzuschließen.

PgmHeader
// Makro-Definition
#define CHECK_ERROR \
   if (error != 0) \
     { cout << "Fehler!"; exit(error); }

// Im Programm dann
...
CHECK_ERROR
// Wird ersetzt durch
// if (error != 0)
//    { cout <<"Fehler"; exit(error); }
AchtungInnerhalb eines Makros das über mehrere Zeilen geht darf niemals ein Kommentar stehen! Durch das Backslash-Zeichen am Zeilenende wird ansonsten alles, was nach dem öffnenden Kommentar steht ebenfalls als Kommentar interpretiert.

Zusätzlich können Makros auch noch Parameter besitzen. Die Parameter werden, genauso wie bei Funktionen, in Klammern eingeschlossen und mehrere Parameter werden durch Komma voneinander getrennt. Beachten Sie, dass hier nur Parameternamen stehen und keine Datentypen wie bei Funktionen, da die #define-Anweisung vom Präprozessor verarbeitet wird und nicht vom Compiler!

PgmHeader
// Makro-Definition
#define CAREA1(rad) 3.14/4.0*(rad)*(rad)
// Das gleiche Makro, nur andere Schreibweise
#define CAREA2(rad) 3.14/4.0*rad*rad

// main() Funktion
int main ()
{
   double erg;  // Variable für Ergebnis
   double val;  // 'Argument'

   ...
   // Folgende Anweisung
   erg = CAREA1(val+2.);
   // wird erweitert zu:
   // erg = 3.14/4.0*(val+2.)*(val+2.);

   // Folgende Anweisung

   erg = CAREA2(val+2.);
   // wird erweitert zu:
   // erg = 3.14/4.0*val+2.*val+2.;
   // (Punkt- vor Strichrechnung!)

}
AchtungSolche Makros sind, wie bereits erwähnt, eigentlich ein Relikt aus vergangenen Tagen und sehr fehleranfällig. Sehen Sie sich dazu einmal die Definition des Makros CAREA2 und den daraus resultierenden Code an. Für solche kleinen Funktionen sollten besser inline-Funktionen eingesetzt werden, die später noch behandelt werden.