Ich muss verstehen, wie dieser Code funktioniert:Ich verstehe nicht das Verhalten von #define Makro in C++
#define foo1(a) (a * a) // How does this work?
inline int foo2(int a) { return (a * a); }
int goo1(int x) { return foo1(foo2(x)); }
int goo2(int& x) { return x = foo2(foo1(x)); }
int goo3(int& x, int y) { return foo2(foo1(y + 1)); }
void goo4(int& x, int y) { x = foo1(foo2(y + 1)); }
int main(){
int i = 2, j = 1, a = 2+3;
cout << "foo1 = " << foo1(1+2) << "\n"; // How does this work?
cout << "foo2 = " << foo2(2 + 1) << "\n";
cout << "goo1 = " << goo1(i) << "\n";
cout << "goo2 = " << goo2(j) << "\n";
cout << "goo3 = " << goo3(i, j) << "\n"; // How does this work?
goo4(i, j);
cout << " i = " << i << " j = " << j << "\n";
}
Aber ich scheine nicht das Verhalten dieser Funktion verstehen zu können:
#define foo1(a) (a * a)
und daher verstehe ich nicht, den Ausgang dieser beiden Funktionsaufrufe:
foo1(1+2)
goo3(i, j)
Dies ist der Ausgang des p rogram:
foo1 = 5
foo2 = 9
goo1 = 16
goo2 = 1
goo3 = 9
i = 16 j = 1
Ich kann nicht sehen, warum foo1 nicht wie foo2 verhalten. Würde mir jemand erklären, wie dieses #define-Makro funktioniert?
HINWEIS: Ich darf den Code nicht ändern, ich versuche nur, die Ausgabe zu verstehen.
verwenden aus diesem Grund Sie Inline-Funktionen zu tun, anstatt #defines – pm100
versuchen '#define foo1 (a) ((a) * (a))' wenn Sie müssen definieren – pm100
# define foo1 (a) ((a) * (a)). Du hast keine Makros gelebt, bis du C kennst und gelernt hast, sie nicht zu benutzen. –