2017-02-09 4 views
0

define을 사용하는 문제 OP(9)을 호출 할 때 제대로 작동하지만 OP(7+2)이라고 호출하면 23이됩니다. 왜?입력이 복합 인 경우 C로 정의되지 않음

#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; 

} 

왜 23이 아닌 81을 인쇄합니까?

+2

괄호를 사용하십시오. 이 질문은 중복되어야합니다. – jxh

+1

괄호 - 또는 그것의 부족. '7 + 2 * 7 + 2' - 즉'23'을보십시오. '(7 + 2) * (7 + 2)'를 원한다면 괄호'#define OP (x) ((x) * (x))'를 추가하십시오! –

+1

"...하지만 OP (7 + 2)를 호출 할 때 ..."OP (7 + 2)를 "호출 할 수 없습니다." 'OP'는 매크로가 아니라 함수입니다. 매크로는 "호출"할 수 없습니다. 그들은 substutuded/교체 수 있습니다. 나머지는 다음과 같습니다. – AnT

답변

4

우선 순위를 적용하려면 괄호 안에 x을 입력해야합니다. 그러나 전체 표현식을 괄호로 묶는 것도 중요합니다.

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

더 나은 :'#define OP (x) ((x) * (x))' –

+1

은 -1에서 +1로 변경되며,이 라인을 실행하면 이성을 볼 수 있습니다.'#define ABS (a) (a) <0? - (a) : (a)'printf ("ABS (-3) - 1) : % d \ n", ABS (-3) - 1); –