Programming/C++

매크로 함수,인라인 함수

DDang goon 2020. 12. 23. 05:30

매크로 함수

매크로

여러번 사용하게 될 상수를 문자로 표현하는 방법이다.

매크로 상수는 컴파일 전 전처리기에 의해서 숫자로 치환된다.

 

장점

-가독성이 매우 좋아진다. 일반 상수를 적어 놓으면 알수 없지만 매크로를 이용해 이름을 써놓으면 인지하기 쉽다.

-상수 변경에 매우 용이하다. 일반 상수를 변경해야할 때는 일일이 변경해야하지만 매크로를 사용했다면 매크로 부분만 수정하면 된다.

 

매크로 함수

매크로를 이용하여 함수의 역할을 대신한다.

파라미터를 받을 수 있으며, 반환할 수 있다.

 

장점

-인수 타입을 신경쓰지 않아도 된다. 단순 치환만 해주기 때문에 신경쓰지 않아도 된다.

-함수호출에 의한 성능 저하가 없다.

단점

-단순 치환방식이라서 복잡한 함수의 기능은 구현하기 어렵다.

-#define은 전처리기 영역에서 단순 치환이기 때문에 결과가 다른 경우가 존재하며, 컴파일에서 발생하는 데이터 타입 문제는 발견하지 못한다.

#define MAX 100	//단순매크로
#define COUT std::cout //단순 매크로
#define ENDL std::endl //단순 매크로
#define SUM(a,b) a+b //매크로 함수
#define MUL(a,b) a*b //매크로 함수

void main()
{
    COUT << SUM(1, 2) << ENDL; //3
    COUT << MUL(2, 5) << ENDL; //10
    COUT << MUL(5+5, 3+3) << ENDL;  //23 (5+5*3+3) 
}

3번째 계산 MUL(5+5,3+3)에서 60이 아니고 23이 나온 이유는 단순 치환이기 때문에 전처리기에 의해

5+5*3+3으로 계산되었기 때문이다.

60으로 결과가 나오게 하려면 MUL(a,b) ((a)*(b))처럼 선언해주어야 한다.

 

인라인 함수

매크로 함수의 단점을 보완하고자 일반함수의 성향을 조금 빌려온 함수이다.

인라인 함수는 치환되어 사용된다.

인라인을 표시하지 않더라도 컴파일러에 따라 자동으로 인라인화를 할 수도 있다.

 

장점

-경우에 따라 일반 함수보다 실행 속도가 빠르다. 함수 호출 코드에 직접 인라인 함수의 코드가 치환되어 실행되기 때문에 주소 영역 점프가 필요하지 않기 때문이다.

단점

-매크로 함수와 다르게 데이터 타입을 판단해야 한다.

-코드 자체가 함수 호출단에 치환되기 때문에 메모리 쪽에서는 일반 함수보다 비효율적이다.

#define COUT std::cout
#define ENDL std::endl

inline int MUL(int a, int b)
{
	return a * b;
}
int main()
{
	COUT << MUL(3,5) << ENDL; //15
}