Makro mit Paramtern
-
Hallo zusammen,
warum werden unterschiedliche ergebnisse ausgegeben? dazu folgendes programmchen:
#include <stdio.h> #define MAX(a,b) ((a)>(b) ? (a):(b)) int main() { int x=5,y=1; int x1=5,y1=1; int t=MAX(++x,++y); int k=MAX(x1++,y1++); printf("max ist:%d\n",t); /* hier müsste auch 7 ausgegeben werden */ printf("max ist:%d\n",k); }
hat jemand ein Idee?
-
-
Zielen 7 und 8 zeigen einige der Schwächen von Makros, wenn man sie einsetzt, ohne zu wissen, was sie tatsächlich tun. Man sollte auf pre/postincrement Operatoren verzichten, wenn man mit Makros arbeitet, weil es solche Seiteneffekte geben kann (man kann mit Makros nicht vorhersehen, ob es mehrmalige Codeauswertung stattfindet). Siehe Inline functions: Comparison to macros
-
supertux schrieb:
[...]man kann mit Makros nicht vorhersehen, ob es mehrmalige Codeauswertung stattfindet[...]1
Wieso sollte man das nicht vorhersehen können?
-
Kannst du das ohne dir die Implementierung des Makros anzuschauen?
-
Tachyon schrieb:
supertux schrieb:
[...]man kann mit Makros nicht vorhersehen, ob es mehrmalige Codeauswertung stattfindet[...]1
Wieso sollte man das nicht vorhersehen können?
du musst dir die Implementierung anschauen, und diese kann sich auch (von dir unbemerkt) im Laufe der Zeit verändern, z.B. bei Bibliotheken, die du nicht selber schreibst.