본문 바로가기
Computer & Program/잡다한 이모저모

[C++]inline Function

by TDRemon 2009. 7. 22.
반응형
함수를 정의할 때 보면         
    
type funct() { ... }

라고 정의할 때가 있는 반면

inline type funct() { ... }

라고 정의할 때도 있다. 이 두개의 차이는 무엇일까? 그건 바로 함수를 호출에 차이가 있다.
inline없이 선언 했을 경우 함수를 호출하지만 inline를 선언해 주면 그 함수 본체의 코드가 직접 삽입된다.
           일반적인 함수 호출(inline 선언 없는 함수)             함수 funct()에 inline이 붙어있었을 경우
 void funct() {
        example code1;
        example code2;
}

int main(){
        main_function code1;
        funct();        // 함수 호출
        main_function code2;
        funct();        // 함수 호출
        main_function code3;
        return 0;
}
 int main()
{
        main_function code1;
        example code1;        // 함수 대신 직접 삽입
        example code2;
        main_function code2;
        example code1;        // 함수 대신 직접 삽입
        example code2;
        main_function code3;
        return 0;
}


결국 inline 함수를 사용하면 함수를 호출하는 데 걸리는 시간을 최소로 할 수 있으므로 실행 시간이 빠를 수 있다. 그러나 inline함수를 많이 사용하게되면 실행파일이 커진다는 단점 또한 가지고 있다. 즉, 어떠한 함수가 inline 에 적합하냐 하면은...

▶ 1~3줄 정도의 작은 함수
▶ 인수가 많고, 복잡한 함수
▶ 호출 횟수가 적은 함수
▶ 함수 호출에 오버헤드(overhead)가 큰 함수

inline 함수의 제한 사항으로는...

▶ 함수 내에 반복문이 있는 경우에는 사용 불가
▶ inline 붙이 프로토타입 선언 불가
▶ 유효 범위는 정의에서 파일의 종료까지

이다. 뭐 든지 그렇지만 잘 알고 쓰면 좋지만 잘 알지 못하면 쓸대 없이 Error만 발생시키므로 잘 숙지합시다 ^^
반응형

'Computer & Program > 잡다한 이모저모' 카테고리의 다른 글

[Linux]리눅스의 특징  (0) 2009.07.23
[C/C++]컴파일 & 링크  (0) 2009.07.22
[C++]Function Template  (1) 2009.07.18
[C++]cin의 함정 피하기  (0) 2009.07.18
01.리눅스 개요 - 리눅스 역사  (0) 2009.07.16

댓글