2012-06-01 2 views
1

가능한 중복은 :
C Macros and use of arguments in parentheses
C 프로그래밍 매크로 곱셈

나는 매우 흥미로이 매크로 질문을 발견했다.

이 다음 코드는 매크로

#define MULT(x, y) x * y 

로 정의 그리고 함수 호출 int z = MULT(3 + 2, 4 + 2);로했을 경우. 원하는 출력은 3 + 2 = 5 및 4 + 2 = 6이고 5 * 6은 30이됩니다.

그러나 반환 된 출력은 13입니다. 3 + 2 * 4 + 2로 표시됩니다. 따라서 연산자의 우선 순위에 따라 2 * 4를 먼저 계산합니다.

수정 사항은 무엇입니까? 이와 같이 효율적인 작은 함수의 경우? 함수 정의 또는 매크로 사용? 이 시도

#define MULT(x, y) ((x)*(y)) 
+2

많은 복제본 ... –

+0

효율성을 어떻게 측정합니까? 코딩 시간, 실행 시간, 유지 보수성 ... –

+0

아마 매크로가 더 효율적입니다. 옵티 마이저가 함수를 인라인하면 아마도 동등 할 것입니다. –

답변

10

뭔가를 시도

#define MULT(x, y) ((x) * (y)) 

가 개인적으로, 나는 그것이 하지에 더 읽기 (적은 키 입력) 매크로를 사용하는 것 같아요. 이것은 새로운 일을 배우고 나중에 후회하면서 누군가가 코드에 추가하기 시작할 것입니다.

+0

감사합니다. 그러나 문제는 효율성에 대해 더 우려했다. – Katti

+0

@Katti : 어떤면에서 효율성과 관련이 있습니까? –

+0

'x * y'를 사용하고 매크로 나 함수를 건너 뛰지 않는 이유는 무엇입니까? – aztaroth

0

:

+1

괄호가 누락되었습니다. 'z/MULT (x, y)'를 상상해 보라. – Shahbaz