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

+ Recent posts