Makros definieren (1/2)

Eine zusätzliche Funktion des #define-Befehls ist die Definition von Makros. Dem Präprozessor können nach dem Namen des Symbols auch zusätzliche Parameter in Klammern gegeben werden, die im zu ersetzenden Text wieder auftauchen können, wo sie dann textuell eingesetzt werden, so würde das folgend Makro:

  #define AUSGABE(Ausdruck) cout<<"Ausdruck = "<<Ausdruck<<endl

Aufrufe wie:

  AUSGABE(5*3); // ergibt: '5*3 = 15'

erlauben. Dabei können allerdings schnell Probleme auftreten, so würden Aufrufe wie die folgenden schwer erklärbare Fehler hervorrufen:

  AUSGABE("Hallo"); // ergibt cout<<""Hallo" = "... => Fehler
  AUSGABE(5<<3);    // ergibt '5<<3 = 53' statt '5<<3 = 40'

Diese Probleme treten deswegen auf, weil der Präprozessor stur den Text ersetzt - ohne Rücksicht auf die Struktur des Programms.