인라인 함수(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;
}