Ich versuche, dieses Programm druckt zu verstehen, warum 8.C Funktionen definieren?
#define mul(x,y) (x * y)
int main() {
int x = 3;
int y = 4;
int z = 0;
z = mul(x+1, y+1);
printf(“4*5 = %d \n”, z);
}
Ich versuche, dieses Programm druckt zu verstehen, warum 8.C Funktionen definieren?
#define mul(x,y) (x * y)
int main() {
int x = 3;
int y = 4;
int z = 0;
z = mul(x+1, y+1);
printf(“4*5 = %d \n”, z);
}
Macros sind keine Funktionen
Nach der ersten Phase der Kompilierung, Vorverarbeitung, wird das Makro erweitert:
z = mul(x+1, y+1);
// becomes
z = (x+1 * y+1);
Kein Zweifel, dass x + 1*y + 1 == 8
.
Eine bessere Möglichkeit, dieses Makro zu definieren, ist zu parenthesize x
und y
:
#define mul(x, y) ((x)*(y))
Sie können es selbst ausprobieren: Kompilieren Sie diesen Code mit gcc -E foo.c -o foo.i
#define mul(x, y) (x * y)
int x = 3;
int y = 4;
int z = mul(x+1, y+1)
Und siehe den Inhalt foo.i
.
A macro nicht eine mathematische Operation, aber Code Ersatz nicht durchführt.
So nach dem Schritt der Vorverarbeitung, Ihr Code sollte wie folgt aussehen:
int main() {
int x = 3;
int y = 4;
int z = 0;
z = (x+1 * y+1);
printf(“4*5 = %d \n”, z);
}
So z 3 + 4 * 1 + 1
gleich sein sollte, das heißt 8.
Es ist "ungefähr" 8? –
@KeithThompson Missverständnis über die Bedeutung des Wortes von einem nicht-englischen Muttersprachler. Ich entschuldige mich, korrigierte ich. Danke, dass Sie mich darauf aufmerksam gemacht haben! – vmonteco
@vmonteco Ich bin auch kein englischer Muttersprachler. Aber ich kann Ihnen versichern, dass "grob" ungefähr "ungefähr" bedeutet, was kein gutes Wort ist, wenn Sie "wirklich" oder "endlich" meinen wollen. – iBug
Also kann dies als Reihenfolge der Operationen gesehen werden? – rubberduck
@rubberduck Ja. – iBug
@KeithThompson Danke ... Ich war schläfrig tippen diese Antwort ... – iBug