#define - Wie geht das?



  • Hey Leute,

    kann mir jemand die Aufgabe erklären,

    #include <stdio.h>
    #include <math.h>
    #define root(a,b) sqrt(a*a+b*b)

    void main(void)
    {
    double x,y;
    x=5.0;
    y=4.0;
    printf("\nroot:%f",root(x,y));
    x=4.0;
    y=2.0;
    printf("\nroot:%f",root(x+1,y+2));
    }

    Als Lösung spuckt der Compiler,
    root:6.403124
    root:4.123106

    😮 😮 😮 😮 😮 😮



  • #define ist ein Makro, quasi simple Textersetzung. Aus

    #define root(a,b) sqrt(a*a + b*b) 
    void main(void) 
    { 
    	double x,y; 
    	x=5.0; 
    	y=4.0; 
    	printf("\nroot:%f", root(x,y)); 
    	x=4.0; 
    	y=2.0; 
    	printf("\nroot:%f", root(x+1,y+2)); ; 
    }
    

    wird

    void main(void) 
    { 
    	double x,y; 
    	x=5.0; 
    	y=4.0; 
    	printf("\nroot:%f", sqrt(x*x + y*y)); 
    	x=4.0; 
    	y=2.0; 
    	printf("\nroot:%f", sqrt(x+1*x+1 + y+2*y+2)); 
    }
    

    Man beachte Punkt-vor-Strich. 😉
    Richtig müsste das Makro heißen:

    #define root(a,b) sqrt((a)*(a) + (b)*(b))
    


  • Das erste Ergebnis krieg ich raus, bei der zweiten Ausgabe krieg ich das selbe Ergebnis wie beim ersten 😕

    printf("\nroot:%f", sqrt(x+1*x+1 + y+2*y+2));



  • Ein bisschen ausführlicher? Ich habe gerade nicht die geringste Ahnung was das Problem ist. 😕



  • Wiedereinmal: falsches Unterforum - hier ist C++/CLI, eine .NET Sprache und nicht (ISO) C++ und auch nicht C (das scheint auf deinen Code zu passen).


Anmelden zum Antworten