[C++] 인라인 함수

서희찬·2021년 4월 28일
0
post-thumbnail

"inline 함수"라는 이름을 의역해보자!
in = "내부"
line = "프로그램 코드라인"

즉, 인라인 함수는 "프로그램 코드라인 안으로 들어가 버린 함수"라는 뜻이 된다.

매크로 함수 장점

매크로 함수의 대표적인 장점은

"일반적인 함수에 비해서 실행속도의 이점이 있다."

단점은

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

복습겸 메크로 함수를 하나 확인해보자.

여기서 중요한 점은 함수의 몸체 부분이 함수의 호출문을 대체했다는 것이다.

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

우리는 그래서 다음과 같이 생각할 수 있다!

"매크로 함수는 정의하기가 복잡하니, 일반 함수처럼 정의가 가능하면 좋겠다.."

이는 매크로 함수의 장점은 유지하되, 단점을 제거하면 좋겠다는 의미인데!!
c++은 이 요구사항을 100퍼센트 만족한다!!

c++ 기반의 인라인 함수 정의

참고로 매크로를 이용한 함수의 인라인화는 전처리기에 의해
키워드 inline을 이용한 함수의 인라인화는 컴파일러에 의해 처리가된다.
컴파일러는 성능이 해가되면 무시하고 필요하다고 생각하면 인라인화를 한다.

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

사실 위의 인라인함수로는 매크로 함수의 장점을 완전히 대체하진 못한다.

메크로 함수는 자료형에 의존적이지 않는 함수이지만
inline 형은

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

std::cout<<SQUARE(3.15);; //3*3 = 9 데이터 손실 발생

물론~ 오버로딩을 통해서 이를 해결할 수 있지만
그러면 한번만 정의하면 되는 매크로 함수의 장점과 멀어진다!!!
하지만!
이는 추후에 배울 템플릿으로 해결이 가능하다.

간단한 예만 확인하고 다음으로 넘어가자.

#include <iostream>

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

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

손실이 발생하지 않았다!

profile
Carnegie Mellon University Robotics Institute | Research Associate | Developing For Our Lives, 세상에 기여하는 삶을 살고자 개발하고 있습니다

0개의 댓글

관련 채용 정보