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

2024. 4. 11. 11:54[C++]/C++ 언어 기초

🍃 인라인 함수 이름의 의미

  • in은 내부를 의미
  • line은 프로그램 코드라인을 의미한다.
  • 따라서 의역하면 "프로그램 코드 안으로 들어가 버린 함수"라는 의미가 된다.

 

🍃 매크로 함수

매크로 함수의 장점

  • 일반적인 함수에 비해서 실행속도의 이점이 있다.
  • 성능향상에 도움이 되는 상황이 있다.

 

매크로 함수의 단점

  • 복잡한 함수를 매크로 형태로 정의하는데 한계가 있다.

 

매크로 함수 예시

#include <iostream>
#define SQUARE(x) ((x)*(x))   //매크로 함수

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

 

전처리 과정을 거친 예시

#include <iostream>

int main(void) {
	std::cout<< ((5)*(5)) <<std::endl;
    return 0
}
  • 달라진 점은 함수 몸체 부분이 함수의 호출문을 대체한 것이다.
  • 위와 같이 함수의 몸체 부분이 함수 호출 문장을 완전히 대체했을 때 "함수가 인라인화 되었다"라고 표현한다.

 

 

🍃 C++ 기반의 인라인 함수 정의

#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;
    return 0;
}
25
144
  • 매크로를 아용한 함수의 인라인화는 전처리기에 의해 처리되지만, inline을 이용한 함수의 인라인화는 컴파일러 에 의해 처리가 된다.
  • 따라서 컴파일러는 함수의 인라인화가 성능에 해가 된다고 판단할 경우 키워드를 무시하기도 한다. 또한, 필요한 경우 일부 함수를 임의로 인라인 처리하기도 한다.

 

 

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

매크로 함수

#define SQUARE(x) ((x)*(x))
  • 위 매크로 함수는 자료형에 의존적이지 않은 함수가 된다.
std::cout<< SQUARE(12); //int형 함수호출
std::cout<< SQUARE(3.15); //double형 함수호출
std::cout<< ((12)*(12)); //int형 함수호출
std::cout<< ((3.15)*(3.15)); //double형 함수호출
  • 따라서 어떠한 경우에도 위와 같이 데이터의 손실이 발생하지 않는다.

 

인라인 함수

inline int SQUARE(int x) { return x*x; }
  • int형 기반으로 정의된 함수이기 떄문에 다음의 함수호출 문장에서 데이터 손실이 발생한다.
std::cout<< SQUARE(3.15); 
//0.15가 손실되어서 3x3의 결과인 9가 출력!

 

  • 함수 오버로딩을 이용할 수 있지만, 여러 개의 함수를 추가로 정의해야하니 매크로 함수의 장점과는 거리가 멀어진다.
  • 이에 C++에서는 "템플릿"이라는 것을 이용할 수 있다.
#include <iostream>

template <typename T>
inline T SQUARE(T x) {
	return x*x;
}

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

 

 

 

반응형