인라인 함수

sz L·2023년 3월 21일
0

C++

목록 보기
3/40
post-thumbnail

인라인 함수(inline)

인라인 함수(inline)를 의역하면 '프로그램 코드라인 안으로 들어가 버린 함수'라는 뜻


매크로 함수

C언어에서는 #define 선행처리 지시문에 인수로 함수의 정의를 전달함으로써, 함수처럼 동작하는 매크로를 만들 수 있습니다. 이러한 매크로를 함수 같은 매크로(function-like macro) 또는 매크로 함수라고 합니다. 매크로 함수는 전처리기가 해석한다.

  • 실행속도의 이점이 있음 --> 함수처럼 분기가 일어나지 않고 코드 안에서 바로 실행이 된다
  • 자료형이 필요없음
  • 정의하기가 어렵다
  • 복잡한 함수를 매크로의 형태로 정의하는데 한계가 있다
#include <iostream>
#define SQUARE(x) ((x)*(x))

using namespace std;

int main() {
	cout << SQUARE(5) << endl;
    // cout << ((5)*(5)) << endl; 와 같은 구문

	return 0;
}


인라인 함수

함수 호출 시 별도로 분리된 위치의 레이블로 점프하여 실행되는 일반 함수와는 달리 호출 부분을 함수 전체 코드로 치환하여 컴파일한다. 전처리기의 매크로와 달리 언어 차원에서 지원하기에 일반 함수와 별 다르지 않게 사용할 수 있다.

  • 매크로 함수의 단점을 보완한 함수
  • 매크로 함수가 정의하기가 복잡하니, 일반 함수처럼 정의가 가능하면 좋겠다는 생각에서 나옴
#include <iostream>

using namespace std;

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

int main() {
	cout << SQUARE(6) << endl;

	return 0;
}


매크로 함수에는 있지만, 인라인 함수에는 없는 장점(템플릿 함수로 보완 가능)

#define SQUARE(x) ((x)*(x))

이는 자료형에 의존적이지 않은 함수가 된다.

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

이 경우는 int 형만 사용가능... float형 사용시 데이터 손실 발생

-> 템플릿 함수를 사용하면 단점 보완 가능

#include <iostream>

using namespace std;

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

int main() {
	cout << SQUARE(6.6) << endl;

	return 0;
}

profile
가랑비는 맞는다 하지만 폭풍은 내 것이야

0개의 댓글