티스토리 뷰

C & C++

[C++] Define 사용시 주의할점

강씨아저씨 2016. 2. 1. 21:44

이번에는 Define에 대해서 알아보겠다~ 

 

이러한 유형문제가 이번에 모 게임회사 필기테스트에도 나왔었다!

 

Define은 참 좋은 매크로이지만 잘못 사용하면 예상치 못한 결과가 나올수도 있다.

 

다음과 같은 코드가 있을때 결과값은 어떨까?



 

그냥 단순하게 생각해보면 

5,0

6,0

7,0 일꺼 같다.

 

하지만 결과를 보면 다음과 같다.


 

매크로로 정의된 GET_MAX(X,Y)를 풀어보면

 

첫번째 GET_MAX(X,Y) 실행시에는 (++x) > (y) ? ++x : y  과 같다 따라서  ++x 이 두번 호출된다. 

 

그렇다면 왜 두번째 실행시에는 ++x가 1만 증가 할까?

 

(++x) > (y+10) ? ++x : y+10  이유는 삼항연산자중에 false 케이스가 호출하기 때문에 ++x는 한번만 호출된다.

 

Define이 좋은 방법이긴 하지만 예상하지 못한 결과가 나올수도 있으니까 항상 사용할때 주의해야 한다.

 

잊어버리지 말자~

 

누군가에게는 작은도움이 되었기를 바라면서 오늘의 포스팅 끝~

댓글