본문 바로가기
C++/함수

[C++] 인라인 함수와 일반함수는 무엇이 다른가

by bigpicture 2022. 7. 28.
반응형

인라인함수의 동작은 매크로함수와 같기 때문에 먼저 매크로 함수와 일반함수의 차이를 간단히 설명하겠습니다. 

 

매크로함수 vs 일반함수

C++로 코딩을 하고 실행파일을 만든는 과정을 생각해봅시다. 아래와 같은 단계를 거쳐서 실행파일인 exe 파일이 만들어집니다. 

 

코드 → 선행처리기 → 컴파일러 → 링커 → 실행파일

 

선행처리기에서 하는 일은 매크로를 치환하는 것입니다. #define A 5 라고 선언되어 있다면 코드 안의 A들을 5로 치환하는 일을 선행처리기가 합니다. 매크로 함수도 선행처리기에서 치환됩니다. 

 

따라서 선행처리기를 거치고 나면 매크로함수는 더이상 없습니다. 매크로로 정의된 수식이 이미 코드에 몸체로 삽입되어 있습니다.  

 

반면 일반함수는 프로그램을 실행한 뒤에도, 해당 함수를 사용할 때마다 호출을 해야 합니다. 스탤에 메모리를 할당하고 매개변수 인자 전달, 값 반환등을 해야하므로 매크로함수에 비해 실행속도가 느립니다. 

 

인라인함수란?

인라인 함수는 매크로함수와 동일하게 동작합니다. 매크로함수는 정의가 까다로운 반면, 인라인함수는 함수 앞에 inline 이라는 한 단어만 추가하면 되므로 정의가 편합니다. 

 

매크로함수랑 똑같나?

똑같지는 않습니다. 아래와 같은 차이가 있습니다. 

 

- 매크로함수는 전처리기에서, 인라인함수는 컴파일러에서 처리됨

- 매크로함수는 자료형 정의가 필요 없지만, 인라인함수는 자료형을 정의해야함

 

인라인함수 사용 예시

아래 코드를 봅시다. 

 

#include <iostream>

using namespace std;


int sum(int a, int b)
{
    return a+b;
}

int main()
{
    int num;
    num=sum(1,5);
    cout<<num<<endl;
}

 

두 값을 더하는 함수 sum 이 정의되어 있습니다. 컴파일을 하면 위 함수는 그대로 남아있습니다. 실행파일을 실행하면 함수를 호출하여 계산을 수행합니다. 

 

inline 함수로 만들어봅시다. 함수 정의 앞에 inline을 추가하면 됩니다. 

 

#include <iostream>

using namespace std;

inline int sum(int a, int b) //여길 보세요
{
    return a+b;
}

int main()
{
    int num;
    num=sum(1,5);
    cout<<num<<endl;
}

 

만약 컴파일을 한다면 num=sum(1,5) 부분이 num=(1+5)로 바뀌게 되는 것입니다. 파일을 실행할 때마다 매번 함수호출을 하지 않게 됩니다. 

반응형

댓글