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.


Log in to reply