2017-02-09 3 views
0

Probleme mit in C. Funktioniert gut, wenn ich OP(9) anrufen, aber wenn ich OP(7+2) aufrufen, bekomme ich 23. Warum?Definieren in C funktioniert nicht, wenn Eingabe Composite ist

#include<stdio.h> 
#include<stdlib.h> 

#define OP(x) x*x; 

int main() { 
int x,y; 

x = 2; 
y = OP(7+2); 
printf("%d", y); 

return 0; 

} 

Warum Drucke 23 und nicht 81?

+2

Verwenden Sie Klammern. Dies muss eine doppelte Frage sein. – jxh

+1

Klammern - oder deren Fehlen. Schau dir '7 + 2 * 7 + 2' an - das ist' 23'. Wenn du '(7 + 2) * (7 + 2)' willst, füge die Klammern hinzu: '#define OP (x) ((x) * (x))' - alle! –

+1

"... aber wenn ich' OP (7 + 2) '' "anrufe" "OP" (7 + 2) 'kann nicht" gerufen "werden. 'OP' ist ein Makro, keine Funktion. Makros können nicht "aufgerufen" werden. Sie können nur substutiert/ersetzt werden. Der Rest folgt. – AnT

Antwort

4

Sie sollten x in Klammern umbrechen, um Vorrang zu erzwingen. Es ist jedoch auch wichtig, den gesamten Ausdruck in Klammern zu schreiben.

#define OP(x) ((x)*(x)) 
+0

Besser noch: '#define OP (x) ((x) * (x))' –

+1

gehen von -1 bis +1 für die Korrektur, Grund kann durch Ausführen dieser Zeilen gesehen werden # define ABS (a) (a) <0? - a): "printf" ("ABS (-3) - 1):% d \ n", ABS (-3) - 1); " –

Verwandte Themen