* inline함수
    - 매크로함수와 그냥 함수의 중간적인 성격을 띤 함수이다.


    - 일반적인 함수를 사용하면 필요할 때마다 호출하여 사용하므로 실행파일의 크기를

     줄일 수 있으나 제어권의 이동이 심하므로 실행 속도가 느려진다.


     - 매크로 함수는 컴파일시 전개되어 치환되므로 제어권 이동이 발생하지 않으므로

     속도가 빠르지만 데이터형 지정을 할 수가 없고 실행파일의 용량이 커지게 된다.


    - 인라인 함수는 컴파일시 통째로 매크로처럼 전개되어 속도면에서 큰 이득을 얻는다.

     그리고 데이터형 체크를 할 수 있는 함수이다.
     용량이 커지는 단점이 있긴 하지만 간단한 작업을 하는 함수의 경우에 이용하면 매우

     편리하다.


 * inline 함수의 제약조건
    - inline 함수 내에서는 루프문(do whie, while, for), switch, goto문을 사용할 수 없다.
    - inline 함수호출시 호출되기 전에 먼저 inline 함수가 정의되어 있어야 한다.
    - inline 함수 내에서 재귀호출을 할수 없다.
    - inline 함수는 한 수식 내에서 두 번이상 호출될수 없다.
    - 함수 포인터로 inline 함수의 주소를 취할 수 없다.
    - inline 함수는 호출방식이 아니라 치환전개방식이기 때문이다.




1. 이 항목의 주요는 "전처리기 보다는 컴파일러를 선호 한다" 일 것이다!

#define ASPECT_RATIO (1.653)              // #define 보다는

[문제]

심볼 명 ASPECT_RATIO를 컴파일러는 전혀 알수 없다. ( 전처리기에서 처리를 하므로 ) 결과적으로 ASPECT_RATIO 란 이름은 심볼 테이블에 들어 가지 않는다.

컴파일 시 에러가 발생하면, 컴파일러는 "1.653" 을 언급하지 ASPECT_RATIO 를 언급하지 않는다, 따라서 작성자는 1.653이 어디에서 왔는지 알 수 없게 된다. 이것은 혼란을 야기 한다.

[해법]

const double ASPECT_RATIO = 1.653 ;    // const 를 쓰는 것이 좋다.

이렇게 const 를 사용하면, 컴파일시 에러가 발생해도, 즉시 무엇이 문제 인지 판단할 수 있다. (컴파일러가 일러 준다. )

2. 이 항목의 주요는 "#define 보다는 inline을 사용하자!" 이다.

#define max( a, b ) ( ( a ) > ( b ) ? ( a ) : ( b ) )  // 두 값중 최대값을 리턴한다.

[문제]

max( ++a, b ) ;        // a 가 두번 증가 한다.

max( ++a, b + 10 ) ; // a 가 한번 증가 한다.

위 매크로 함수는 max 내부에서 일어나는 그 무엇과 비교를 하느냐에 따라 값이 달라지는, 넌센스를 갖고 있다.

[해법]

inline int max ( int a , int b ) { return a > b ? a : b ; } // int 버전의 한계성이 있다.

한계를 극복하려면, 템플릿을 사용하면 된다.

template<class T>

inline const T& max ( const T& a, const T& b ) { return a > b ? a : b ; }

템플릿 버전은 모든 한계를 극복하고 모든 종류의 함수를 생성한다.


'개발지식창고 > C' 카테고리의 다른 글

비트 시프트 연산자를 이용한 프로그램  (0) 2011.08.31
define함수 대신 template를 쓰자  (0) 2010.09.20
C 문자열 함수 정리  (0) 2010.09.20
BASE64 Encode/Decode  (0) 2010.09.20
문자열 처리 함수들  (0) 2010.08.22
Posted by 모과이IT
,