매크로 함수
매크로
여러번 사용하게 될 상수를 문자로 표현하는 방법이다.
매크로 상수는 컴파일 전 전처리기에 의해서 숫자로 치환된다.
장점
-가독성이 매우 좋아진다. 일반 상수를 적어 놓으면 알수 없지만 매크로를 이용해 이름을 써놓으면 인지하기 쉽다.
-상수 변경에 매우 용이하다. 일반 상수를 변경해야할 때는 일일이 변경해야하지만 매크로를 사용했다면 매크로 부분만 수정하면 된다.
매크로 함수
매크로를 이용하여 함수의 역할을 대신한다.
파라미터를 받을 수 있으며, 반환할 수 있다.
장점
-인수 타입을 신경쓰지 않아도 된다. 단순 치환만 해주기 때문에 신경쓰지 않아도 된다.
-함수호출에 의한 성능 저하가 없다.
단점
-단순 치환방식이라서 복잡한 함수의 기능은 구현하기 어렵다.
-#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
}
'Programming > C++' 카테고리의 다른 글
연산자 오버로딩 (0) | 2021.01.04 |
---|---|
범위 지정 연산자(::) (0) | 2020.12.23 |
매개변수의 디폴트 값 (0) | 2020.12.23 |
비주얼 스튜디오 다중 문자열 검색 (0) | 2020.08.04 |
[C/C++] C++에서 싱글톤을 사용하는 방법/Lazy initialzation (0) | 2019.09.16 |