C언어에는 매크로 함수라는 기능이 있다.
매크로 함수의 대표적인 장점은 "일반적인 함수에 비해서 실행속도의 이점이 있다" 이다.
단점으로는 "정의하기가 어렵다. 복잡한 함수를 매크로 형태로 정의하는데 한계가 있다" 이다.
C++언어에는 이러한 매크로 함수의 장점은 유지를 하되 단점은 제거한 기능이 있다.
바로 인라인(Inline) 함수 이다. 코드를 보자.
- InlineFuce1.cpp -
#include <iostream>
using namespace std;
inline int SQUARE(int x)
{
return x*x;
}
int main(void)
{
cout << SQUARE(5) << endl;
cout << SQUARE(12) << endl;
return 0;
}
실행화면
이러한 인라인 함수도 매크로 함수의 장점을 완전히 대체하지 못하였다.
그것은 데이터의 손실 이다. 예를 보면서 설명 하겠다.
#define SQUARE(x) ((x)*(x))
cout << SQUARE(12); int형 함수호출
cout << SQUARE(3.15); duble형 함수호출
위와 같이 실행을 하면 다음과 같이 변환이 이뤄져서
어떠한 경우에도 데이터의 손실이 발생하지 않는다.
cout << ((12)*(12)); int형 함수호출
cout << ((3.15)*(3.15)); duble형 함수호출
하지만 다음과 같이 정의된 인라인 함수의 경우에는...
inline int SQUARE(int x) { return x*x }
int형 기반으로 정의된 함수이기 때문에 다음의 함수호출 문장에서 데이터 손실이 발생한다.
cout << SQUARE(3.15); //0.15가 손실되어서 3 X 3의 결과인 9가 출력!
이러한 문제를 해결하기 위해서 C++의 템플릿이라는 것을 이용하면 매크로 함수와 마찬가지로 자료형에 의존적이지 않는 함수가 완성된다. 템플릿은 이후에 서적을 참고하여 이후 글에서 다시 소개하겠다.
대신 서적에 있는 간단한 예시를 통해 맛을 보자.
#inlcude <iostream>
using namespace std;
template <typename T>
inline T SQUARE(T x)
{
return x*x;
}
int main(void)
{
cout << SQUARE(5.5) << endl;
cout << SQUARE(12) << endl;
return 0;
}
위 코드를 실행해보면 데이터 손실이 없는 것을 볼 수 있다.
'[C], [ C++]' 카테고리의 다른 글
[흑역사] - 너구리 게임 (0) | 2016.03.30 |
---|---|
이름공간(namespace[네임스페이스]) 소개 (0) | 2016.02.21 |
매개변수의 디폴트 값 (0) | 2016.02.21 |
STL - list 사용 예시 예제 (0) | 2016.02.19 |
함수 오버로딩 (0) | 2016.02.18 |