반응형
인라인 함수라는 것은 단어 뜻대로 보면 "프로그램 코드라인 안으로 들어간 함수" 라는 뜻이된다.
매크로 함수의 장점
일반적인 함수에 비해서 실행속도의 이점이 있다.
왜냐하면 컴파일 이전에 코드가 변환되되어 일반적인 함수가 가지는 호출 과정이 없기 때문에 속도면에서 이득을 보인다.
매크로 함수의 단점
정의하기가 어렵고, 복잡한 함수를 매크로의 형태로 정의하는데 한계가 있다.
매크로함수 기본 사용법
#include <iostream>
#define SQUARE(x) ((x)*(x))
using namespace std;
int main()
{
cout << SQUARE(5) << endl;
}
인라인 함수는 이러한 매크로 함수의 장점을 챙기고 단점을 보완하기 위해 만들어진 함수이다.
C++ 기반의 인라인 함수 정의
using namespace std;
inline int MULTIPLY(int x) {
return x * x;
}
int main()
{
cout << MULTIPLY(10) << endl;
}
매크로를 이용한 함수의 인라인화는 전처리기에 의해서 처리된다.
하지만 inline 키워드를 이용한 인라인 함수는 매크로 함수와 다르게 컴파일 단에서 처리가 된다. 그렇기 때문에 컴파일러가 정의된 인라인 함수가 성능에 해가 된다고 판단할 경우, 이 키워드를 무시해 버리기도 한다. 또한 컴파일러는 필요한 경우 일부 함수를 임의로 인라인 처리하기도 한다.
매크로 함수에는 있지만, 인라인 함수에는 없는 장점
#define SQUARE(X) 함수는 자료형에 의존하지 않은 함수이다.
따라서 int, float, double 상관없이 사용할 수 있다.
하지만
inline int SQUARE(int x) 함수는 int 형 자료형만 받을 수 있다.
여기서 보완된 점이 바로 C++ 의 템플릿의 사용이다.
템플릿에 대해서는 나중에 다시 정리하겠습니다.
템플릿 사용에 예시는
#include <iostream>
#define SQUARE(x) ((x)*(x))
using namespace std;
inline int MULTIPLY(int x) {
return x * x;
}
template <typename T>
inline T INLINEUSINGTEMPLATE(T x)
{
return x * x;
}
int main()
{
cout << INLINEUSINGTEMPLATE(12) << endl;
cout << INLINEUSINGTEMPLATE(5.2) << endl;
}
반응형
'c++ > c 언어 기반의 c++ 1' 카테고리의 다른 글
01-06 [C++] OOP 프로젝트 Bank Account (0) | 2022.12.28 |
---|---|
01-05 [C++] 이름공간 (namespace) 이해하기 (0) | 2022.12.28 |
01-03 [C++] 매개변수의 디폴트 값 (Default Value) (0) | 2022.12.27 |
01-02 [C++] 함수 오버로딩 (Function Overloading) (2) | 2022.12.27 |
01-01 [c++] 입 출력 연산자 (0) | 2022.12.27 |