매크로
컴파일 이전에 정의하는 단순 치환이다.
매크로 선언방법
#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 |