2017-12-13 3 views
-4

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); 
} 

Antwort

3

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.

+0

Also kann dies als Reihenfolge der Operationen gesehen werden? – rubberduck

+0

@rubberduck Ja. – iBug

+0

@KeithThompson Danke ... Ich war schläfrig tippen diese Antwort ... – iBug

0

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.

+1

Es ist "ungefähr" 8? –

+2

@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

+0

@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

Verwandte Themen