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?