기타 학습/Language
[C++] 매크로 함수와 인라인 함수 (macro, inline function)
sdoaolo
2022. 5. 6. 18:26
728x90
매크로 함수?
씨언어에서 아주 간단하게 정의하는 함수
#define 함수이름(인자이름) ( 리턴할 값 )
- 매크로함수는 자료형에 의존적이지 않다.
- 그러나 복잡한 return 값이 생길 경우 정의하기가 쉽지 않은 특징이 있다.
- 일반 함수보다 실행속도에서 이점이 있다.
- 전처리기에 의한 처리
#define SQUARE(x) ((x)*(x))
#define PIE 3.14
#define CIRCLE(x) ((PIE)*(x)) //매크로 함수
#include<iostream>
int main(){
//매크로 함수의 사용
cout << SQUARE(5) << endl;
cout << CIRCLE(2) << endl;
return 0;
}
인라인 함수 ?
C++에서 C언어의 매크로함수의 기능을 그대로 이어받지만 보통 정의하는 함수와 같이 선언하는 함수
매크로 함수의 어려운 정의방법을 개선 >> 일반 함수처럼 정의 가능 >> 실행속도의 장점은 그대로 가져옴.
- 실행속도 빠름
- 일반함수처럼 쉽게 정의 가능
- 컴파일러에 의한 처리 (컴파일러가 성능에 따라 알아서 판단 : 인라인 무시/처리하기도 함)
- 자료형에 의존적, 의존적이지 않은 인라인 함수를 만들려면 템플릿을 사용해야한다.
inline 반환형 함수이름(변수형 이름){
return 반환값
}
템플릿 : 자료형에 의존적이지 않게 코드를 작성하는 방법
- 함수나 클래스를 개별적으로 다시 작성하지 않아도, 여러 자료 형으로 사용할 수 있도록 하게 만들어 놓은 틀.
template <typename T>
템플릿을 활용한 함수의 정의
inline T Square(T x) {
return x * x;
}
템플릿 함수
#include <iostream>
#include <string>
template <class T1, class T2>
void print (T1 a, T2 b){
cout << "T1 : " << a << endl;
cout << "T2 : " << b << endl;
}
int main(void){
string s1 = "hello" ;
int num1 = 5;
print(s1, num1);
return 0;
}
인라인 + template
#include<iostream>
using namespace std;
inline int SQUARE(int x) {
return x * x;
}
// 자료형에 의존적
//자료형에 의존적이지 않게 코드 작성 : 템플릿
template <typename T>
inline T Square(T x) {
return x * x;
}
int main() {
//인라인 함수
cout << SQUARE(4) << endl;
cout << Square(3.1) << endl;
return 0;
}