2017-06-23 1 views
1

Ich führe das folgende Programm und bekomme ein Ergebnis als 9 7, verstand ich, warum 9 ist die Ausgabe, aber ich kann nicht herausfinden, warum ich 7 als Ausgabe bekomme.C Makro mit Ausdruck unerwünschtes Ergebnis

#include<stdio.h> 
#define sqr(i) (i*i) 

int main() 
{ 
    printf("%d %d", sqr(3), sqr(3+1)); 
    return 0; 
} 

Für die zweite Funktion, die sqrt(3+1), wie das Mikro ist erweitert zu werden und wie Im 7 Ausgang zu bekommen?

Antwort

4

Sie können den Compiler oder die IDE die Datei vorverarbeiten lassen und Ihnen zeigen, wie das Makro erweitert wurde.

In Ihrem Fall sqr(3+1) erweitert auf (3+1*3+1). Jetzt bedeutet der Vorrang von C-Operatoren, dass die Multiplikation vor der Addition erfolgt. Also (3+1*3+1) ->(3+3+1) ->(7).

Sie können dieses Problem beheben, indem Sie Ihre Makro diese Art und Weise definiert, mit Klammern um das Argument:

#define sqr(i) ((i)*(i)) 
+0

ich vergessen habe, seine Expansion in IDE zu überprüfen. Danke übrigens. –

Verwandte Themen