본문 바로가기

C++

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

인라인(inline) 함수란?

프로그램 코드라인 안으로 들어가 버린 함수를 의미한다.

매크로 함수의 장점을 유지하되, 단점을 제거한 함수이다.



매크로 함수란?

매크로 함수에 대해 먼저 살펴보면,

매크로 함수는 전처리 과정에 함수의 몸체부분이 함수의 호출문을 텍스트로 완전히 대체한다.

(아래 예제에서 POW(a)부분이 ((a)*(a))로 대체된다.)

따라서 매크로 함수는 일반 함수에 비해 실행속도가 훨씬 빠르지만, 복잡한 함수를 정의하는 데에는 한계가 있다.

#include <iostream>

#define POW(x) ((x)*(x))

using namespace std;

int main() {
	int a;
	cin >> a;
	cout << POW(a) << endl;
	
	return 0;
}


인라인 함수 정의

위 매크로 함수를 C++기반의 인라인 함수로 정의하면 아래와 같다.

키워드 inline의 선언으로 인라인 함수를 정의한다.

#include <iostream>

using namespace std;

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

int main() {
	int a;
	cin >> a;
	cout << POW(a) << endl;

	return 0;
}


위와 같이 정의된 인라인 함수는 컴파일러에 의해 처리된다.

인라인화를 함으로써 오히려 성능이 저하된다고 판단될 경우에는, 컴파일러가 이 키워드를 무시하기도 한다.

또한 컴파일러는 필요한 경우 일부 함수를 임의로 인라인 처리하기도 한다.



인라인 함수의 매개변수 자료형

두 예제를 살펴보면, 매크로 함수를 사용할 때는 매개변수의 자료형이 명시되어있지 않은 반면

인라인 함수를 정의할 때에는 매개변수에 자료형이 명시되어 있어야 하는 불편함이 있다.


템플릿이라는 것을 이용하면 이 불편함을 해소할 수 있다.

#include <iostream>

using namespace std;

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

int main() {
	int a;
	cin >> a;
	cout << POW(a) << endl;

	return 0;
}


'C++' 카테고리의 다른 글

[C++] 참조자(Reference)  (0) 2019.03.05
[C++] 기본 자료형  (0) 2019.03.05
[C++] 매개변수 디폴트 값  (0) 2019.03.04
[C++] 함수 오버로딩  (0) 2019.03.04
[C++] 입력  (0) 2019.02.28