개발/C, C++

[C++] 인라인(inline) 함수

huiyu 2018. 12. 2. 16:56

inline함수
 -> 프로그램 코드라인 안으로 들어가 버린 함수


1. 매크로함수

 장점

 - 일반적인 함수에 비해 실행속도의 이점이 있다.
 - 단순 치환만 해주므로 인수타입을 신경쓰지 않아도 된다.
 - 여러개의 명령문을 동시에 포함할 수 있다.

 단점

 - 정의하기 어렵다. 복작한 함수를 매크로 형태로 정의하는데 한계가 있다.

1
2
3
4
5
6
7
#include <iostream>
#define SQUARE(X) ((X)*(X))
int main(void)
{
  std::cout<< SQUARE(5<<std::endl;
}
 
cs

위 코드는 SQUARE(5) => ((5)*(5))의 형태로 치환된다.


위와 같이 함수의 몸체부분이 함수호출 문장을 완전히 대체했을 때
'함수가 인라인화 되었다'라고 표현한다.


매크로함수는 성능에 이점이 있으나 정의하기가 복잡다는 단점이 있다.
이러한 단점을 제거한 것이 C++ 인라인 함수이다.


2. C++기반의 인라인 함수 정의

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
inline int SQUARE(int x)
{
  return x*x
}
 
int main(void)
{
  std::cout<< SQUARE(5<<std::endl;
  std::cout<< SQUARE(12<<std::endl;
}
 
cs

-> SQUEARE함수는 inline으로 선언해서 인라인 함수로 사용하고 있다.
 이는 10~11행에서 몸체부분이 호출문을 대체하게 된다.


* 매크로를 이용한 함수의 인라인화는 전처리기에 의해서 처리되지만,
 키워드 inline을 이용한 함수의 인라인화는 컴파일러에 의해서 처리가 된다.
 따라서 컴파일러는 함수의 인라인화가 오히려 성능에 해가 된다고 판단할 경우,
 이 키워드를 무시해버리기도 한다.
 또한 컴파일러는 필요한 경우 일부 함수를 임의로 인라인 처리하기도 한다.


[출처]
윤성우의 열혈 C++ 프로그래밍 01-4 인라인(inline)함수
http://tcpschool.com/c/c_prepro_macroFunc

728x90
반응형