블로그 이미지
LanSaid

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Recent Post

Recent Comment

Recent Trackback

Archive

2013. 12. 17. 22:50 Study/C++
매크로 함수와 inline 함수의 차이

매크로란?
컴파일러의 선행처리기 작업 수행 단계에서 이루어지는 '치환' 작업을 정의
 #define PI 3.14
cout << PI << endl;
위와 같은 상황이 선행처리기 작업 수행 후에는
cout << 3.14 << endl;
으로 치환 된다.

매크로 함수?
#define SQUARE(X)     ((X)*(X))
위의 특징을 이용해서 SQUARE(X) 가  ((X)*(X)) 로  치환하여 함수 처럼 사용하는 방법



매크로 함수의 장점
 함수 호출에 필요한 작업 처리(함수 수행에 필요한  스택 할당과 반환, 함수 본체 탐색 등)가 필요 없어지므로 성능 향상을 기대할 수 있다.
 함수 호출 -> 함수명으로 함수가 존재하는 주소로 탐색 -> 매개변수가 있을 경우 매개변수에 값을 대입 -> 함수 본체 수행
  -> 함수 호출 지점으로 복귀(반환 값이 있을 경우 이 값을 위한 별도의 임시 메모리 공간 발생)
 매크로 함수에 성능 향상을 기대하기 위한 조건 : 잦은 호출, 적은 라인 수

매크로 함수의 단점
1. 함수 정의 방식이 일반 함수에 비해 복잡하므로 복잡한 함수를 정의하기 힘들다. 
2. 천재적인 능력으로 복잡한 함수를 정의했다 하더라도 그 것을 사용하는 사람은 타인이 될 수도 있다. -> 가독성 문제
3. 단순 치환이므로 디버깅을 할수 없다. (자신의 뇌내에서 디버깅하면 모를까...)




inline 함수?
1. 매크로 함수의 장점을 취하고 단점을 극복해보자.
2. inline 키워드에 대해 컴파일러가 판단(inline화 해서 성능 향상을 꾀할 수 있는지)해서 최종적으로 inline화를 결정
 -> 컴파일러에게 inline화 하고 싶다고 의사를 표명하고 컴파일러는 그 요청을 수리할지 안할지를 판단해서 최종적으로 매크로 함수 처럼 할지
   아니면 일반 함수처럼 할지를 결정.  즉, 최종판단을 컴파일러에게 위임.
3. 일반함수와 같은 제약조건을 가지므로 매크로 함수와는 달리 함수 시그니쳐가 자료형에 독립적이지 못하다.
 단, 템플릿을 이용하면 이러한 제약조건을 극복 가능하다.
posted by LanSaid