Präprozessor Direktive
-
Guten Tag,
ich habe folgendes Problem:#include<stdio.h> #include<stdlib.h> #define zeige(x) x*x main(){ int x = 2; zeige(x); printf("%i",x); system("PAUSE"); return 0; }
Er gibt immer 2, aber wenn ich jetzt mein Programm so ändere das der Präprozesor in den Parametern von printf ausgeführt wird wie hier:
#include<stdio.h> #include<stdlib.h> #define zeige(x) x*x main(){ int x = 2; printf("%i",zeige(x)); system("PAUSE"); return 0; }
Ergibt dies immer 4 aber warum?????
-
Weil
2 == 2
und
2*2 == 4
ist?
-
Aber
zeige(x)
macht ja ausdem Wert x = x*x bzw. 2*2 also müsste doch das gleiche Rauskommen oder?
-
Nö, zeige(x) wird zu x*x und das Ergebnis wird dann in deinem ersten Code verworfen, bzw. der Compiler wird die ganze Berechnung vermutlich eh löschen.
-
Anfänger34 schrieb:
zeige(x) macht ja ausdem Wert x = x*x
In der Definition von zeige ist kein x= enthalten.
-
Der Präprozessor macht aus deinem Programm folgendes
#include<stdio.h> #include<stdlib.h> #define zeige(x) x*x main(){ int x = 2; x*x; printf("%i",x); system("PAUSE"); return 0; }
und da steht nicht x = x*x;
Es wird also nur zeige(x) durch x*x ersetzt.