매크로 함수를 쓸 때에는 모든 인자를 () 로 둘러싸야 하며, 매크로 함수 본문 또한 () 로 둘러싸야 합니다.
그렇지 않으면 연산자 우선순위 문제로 원하지 않은 결과가 나옵니다.
이렇게 하더라도 "부작용"이 있는 인자 (예: r++) 등을 매크로 함수에 전달하면 안 됩니다.
매크로 함수를 올바로 이해하고 쓰는 것은 힘듭니다. 정말로 필요한 경우가 아니라면 <algorithm>에 정의되어 있는 std::max 를 권장합니다.
다음 프로그램을 한 번 돌려보세요.
dwhylee 7년 전
#define max (a,b) (a>b) ? a : b 로 풀면 틀렸다고 뜨고..
max 함수 include 해서 쓰면 맞다고 하는데 뭐가 문제인거죠?.;;;;
혹시나 해서 바꿔봤더니 맞네요.
설마 (a>b) 괄호 때문인지..?