관리 메뉴

JIE0025

[C++] 매크로 함수와 인라인 함수 (macro, inline function) 본문

기타 학습/Language

[C++] 매크로 함수와 인라인 함수 (macro, inline function)

Kangjieun11 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;
}​