c에서는 컴파일러가 컴파일하기 전 전처리기에서 처리해주는 매크로기능이 있다
#define PI 3.14
: 매크로 상수
#define SQUARE(x) ((x)*(x))
: 매크로 함수
컴파일 전 코드에 있는 PI, SQUARE를 각각 3.14, ((x) *(x))로 치환해주는 기능이다.
장점 : 함수 호출시 스택할당이 없어지므로 성능 향상
단점 : 복잡한 함수형식 선언 불가
치환해 주는 걸 'inline화 한다' 라고도 한다.
c++에서 매크로 함수를 정의하는 방법은
inline int SPUARE(int x){
return x*x;
}
일반 함수를 선언하는 것에서 앞에 inline
키워드를 추가해주면 된다.
일반 매크로 함수와 inline함수의 차이점은
- inline 함수는 전처리기가 아닌 컴파일러가 처리한다.
- 일반 함수와 선언부분이 같으므로 복잡한 함수를 inline함수로 선언 가능하다.
- 번거롭게 ()를 많이 칠 필요없다.
여기서 컴파일러가 처리한다는 점 덕분에 inline으로 선언한 함수를 inline화 안할 수도 있고, inline으로 선언하지 않은 함수를 inline화 할 수 있다.
모두 컴파일러가 알아서 해준다.
inline 함수의 경우 일반 함수처럼 반환형식이나 매개변수의 형식을 지정해주기 때문에 자료형이 의존적이다.
따라서 templete을 이용해 자료형에 의존적이지 않은 inline 함수를 선언하는 경우가 많다.
templete <typename T>
inline T SQUARE(T x){
return x * x;
}
이렇게 선언하면 자료형에 의존적이지 않게 inline함수를 선언할 수 있다.