본문 바로가기
C++/윤성우 열혈 C++ 프로그래밍

01-4 인라인 함수(inline function)

by 대소기 2021. 9. 26.

매크로 함수

장점
  • 매크로 함수는 컴파일 이전에 선행처리기에 의해 미리 소스코드의 일부를 수정해주는 역할을 한다.
  • 일반 함수는 스택 영역에 변수가 저장되고, PC register가 이동하면서 코드를 처리하고 return문에 의한 값의 반환 후 stack 영역의 데이터들이 지워지고 PC register가 main 함수의 다음 위치로 이동하는 등의 작업이 필요하다.
  • 하지만, 매크로 함수는 이러한 과정을 모두 생략하기 때문에 일반 함수보다 속도적인 이점이 있다.
  • 또한 매개변수의 자료형을 지정해주지 않아도 되기 때문에 정의가 간편하다.
단점
  • if - else문 등과 같이 조금이라도 복잡한 작업을 매크로 함수로는 처리를 하기가 까다롭다.
  • 컴파일시 매크로 함수의 오류를 컴파일러가 인식할 수 없기 때문에 디버깅이 까다롭다.
  • 장점이었던 매개변수의 자료형 지정이 불필요하다는 점이 오히려 여러가지 에러를 야기하는 단점이 되기도 한다.

이렇게 매크로 함수는 실행속도적인 장점이 있지만, 단점이 존재하기 때문에 사용하기 어렵다는 문제가 있었다. 하지만, C++에서는 이러한 매크로 함수를 인라인 함수로서 일반 함수처럼 정의할 수 있다. 그리고 이 인라인 함수는 일반 함수와 동일하게 컴파일러에 의해 처리된다. 다른 점은 인라인화가 성능에 해가 된다고 컴파일러가 판단하면 인라인 함수를 무시한다. 또한 일반 함수도 성능에 문제가 되고 무시해도 무방하다고 판단되면 인라인 함수로서 처리하기도 한다.

인라인 함수 예시

 #include <iostream>

 inline int SQUARE(int x)
 {
     return x*x;
 }

 int main(void)
 {
     std::cout<<SQUARE(5)<<std::endl;
    std::cout<<SQUARE(5)<<std::endl;
    return 0;
 }

매크로 함수에는 있지만, 인라인 함수에는 없는 장점

  • 매크로 함수는 인라인 함수의 장점인 자료형 지정이 불필요하다는 점이 적용되지 않는다. 매개변수의 자료형 지정이 필수적이다.
  • 하지만 template을 사용한다면 이러한 장점을 사용할 수 있다(Template은 추후에 다룬다).