출력이 "4 60"이 아니라 "0 -6"인 이유는 무엇입니까? k = 8, l = 2가 아닌가요?
#define MAC(a,b) (a<b ? a*b:a-b)
void main (void)
{
int i=2;
int j=4;
int k=MAC(i,j);
int l=MAC(j,i);
i=MAC(k+l,k-l);
j=MAC(k-l,k+l);
printf("%d %d\n", i,j);
}
즉각적인 문제입니다. 표현식
MAC(k+l,k-l)
된다
(k+l<k-l ? k+l*k-l:k+l-k-l)
^^^^^^^
그리고 밑줄이 그어진 비트에서 볼 수 있듯이 표현식은 우선 순위 규칙 (곱하기 전에 더하기 전에 수행됨)으로 인해 생각하는 것과 다릅니다.
매크로의 각 인수를 괄호로 묶으면이 문제를 해결할 수 있습니다.
#define MAC(a,b) ((a)<(b) ? (a)*(b):(a)-(b))
그러나 n++
여러 번 증가하므로 같은 것을 전달하면 여전히 도움이되지 않습니다 .
매크로는 매우 간단한 텍스트 대체이며보고있는 것과 같은 문제를 일으키는 것으로 잘 알려져 있습니다. 내 조언은 MAC
다음과 같이 문제를 완전히 피할 수있는 적절한 기능 으로 바꾸는 것입니다.
int mac (int a, int b) {
if (a < b)
return a * b;
return a - b;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다