#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).