본문 바로가기

C++

C++ 매크로,매크로 함수

매크로

컴파일 이전에 정의하는 단순 치환이다.

 

매크로 선언방법

#define 이름 값

1
2
3
4
5
6
 
#define PI 3.14f
 
void main()
{
    cout << PI << endl;
}
cs

1행 : 매크로 정의 PI를 3.14라고 읽겠다.

5행 : PI의 값을 출력한다. 이때 컴파일러는 해당 문장은 cout << 3.14f << endl; 이라고 읽는다.

 

매크로 사용시 주의사항

;을 사용하지 않는다. 물론 ;을 사용해도 문제 될것은없다. 다만 매크로는 뒤에 있는 모든것을 읽기때문에

PI를 반환하면 3.14f가 아닌 3.14f;를 반환한다.

 


 

매크로 함수

매크로를 함수처럼 사용하는것

 

매크로 함수 정의

1
2
3
4
5
6
 
#define Add(num1, num2) num1 + num2
 
void main()
{
    cout << Add(10,20<< endl;
}
cs

1행 : 함수명(값, 값) 내용

5행 : 매크로 함수의 출력부분이다 이부분은 컴파일러 는 cout << 10 + 20 << endl; 이라고 읽는다.

 

매크로 함수의 주의사항

매크로 함수는 함수처럼 매개변수로 값을받아서 함수 안에서 그 부분을 실행 시키는게아닌

inline 처럼 동작합니다. 그래서 사칙연산의 문제가 발생하는데

1
2
3
4
5
6
 
#define Add(num1, num2) num1 + num2
 
void main()
{
    cout << Add(10,20* 2 << endl;
}
cs

해당 문장을 실행하면 사용자는 60이라는 값이 나오기를 원했을것이다.

히자만 결과 값은 50이라는 값이 출력되는데 이유는 10 + 20 * 20 이라고 컴파일러는 해석해서 사칙연산의 우선순위로 20 *20 + 10이 되어 50이라는 값이 나오게 된다. 해당 문제를 해결 하기 위해서는

1
2
3
4
5
6
 
#define Add(num1, num2) (num1 + num2)
 
void main()
{
    cout << Add(10,20* 2 << endl;
}
cs

매크로 함수 정의부분에 ()로 묶어주는것이다.

매크로 함수의 인수들도 각각 괄호로 감싸 주면 더좋다.

 

매크로 함수사용시 주의사항

1. 매크로 함수는 줄바꿈을 할수 없다.

   단 \(역슬래쉬)를 이용하여 줄바꿈을 할수는 있다.

2. 디버깅이 불가능하다.

 

 

 

'C++' 카테고리의 다른 글

C++ Const  (0) 2020.09.14
C++ 조건부 컴파일  (0) 2020.09.07
C++ 함수포인터  (0) 2020.09.07
C++ 연산자 오버로딩 주의사항  (0) 2020.09.06
C++ 연산자 오버로딩(Operator Overloading)  (0) 2020.09.06