C Makromultiplikation programmieren [duplizieren]

Mögliche Duplikate:
C Makros und Verwendung von Argumenten in Klammern

Ich fand diese Makro-Frage sehr interessant.

Wenn dieser folgende Code als Makro definiert ist

#define MULT(x, y) x * y

Und der Funktionsaufruf erfolgt alsint z = MULT(3 + 2, 4 + 2);. Die gewünschte Ausgabe ist 3 + 2 = 5 und 4 + 2 = 6 und 5 * 6 zu 30.

Die zurückgegebene Ausgabe war jedoch 13. Es wird 3 + 2 * 4 + 2 verwendet. Entsprechend der Rangfolge der Operatoren werden daher zuerst 2 * 4 ausgewertet.

Was ist das Problem hier? Bei kleineren Funktionen wie diesen ist welche effizient? Funktion definieren oder Makros verwenden?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage