#include <iostream>
using namespace std;
#define MY_NUMBER "Hello, World!"
#define MAX(a, b) ((a>b) ? a : b)
int main()
{
cout << MY_NUMBER << endl;
cout << MAX(1, 2);
return 0;
}
여기서 MAX(a, b) 꼴은 함수처럼 보이지만 (a, b)가 함수의 파라미터처럼 취급되는건 아니다. 그저 치환당할 대상의 자리를 표시하는 정도이고, 문자열 치환으로 취급한다. 그래서 실제 함수 호출처럼 스택에 값 복사, 타입 검사 등이 발생하지 않고 그냥 코드를 복사해서 붙여 넣는 것이다. 예전에는 속도가 빠를 수 있다는 이유로 매크로 함수를 사용하는 경우가 많았지만, 요즘은 사용하지 않는 추세라고 한다.
이러한 `#define`, `#ifdef`와 같은 것들을 전처리기 지시문이라고 한다. 그리 매크로는 그 중에서 `#define`을 통해 만든 규칙을 의미한다. 이러한 전처리기 지시문은 말 그대로 '전'처리기라서 빌드전에 동작해서 빌드할 때 결정되고 시작한다. 그래서 운영체제 판별이나 그래픽카드 사양같은 것을 다룰 때 사용을 많이 하게 된다.
#include <iostream>
using namespace std;
#define MY_NUMBER "Hello, World!"
#define MAX(a, b) (((a)>(b)) ? (a) : (b)) // 치환될 때 이상하게 꼬일 수 있으니 그냥 치환 대상자체를 ()로 묶어 분리
# define LIKE_APPLE
int main()
{
cout << MY_NUMBER << endl;
cout << MAX(1 + 3, 2) << endl;
#ifdef LIKE_APPLE
cout << "Apple " << endl;
#endif
#ifndef LIKE_APPLE
cout << < "Orange " << endl;
#endif
return 0;
}
그리고 define의 효과는 선언한 파일 안에서만 유효한점을 주의해야 한다.
'C,C++ > 홍정모의 따배C++' 카테고리의 다른 글
| [C++] 전역 변수, 내부 연결, 외부 연결, 헤더 include 주의점 (0) | 2025.12.20 |
|---|---|
| [C++] 함수 내의 static 변수 선언 (0) | 2025.11.30 |
| [C++] 변수 초기화 방식 (0) | 2025.09.25 |
| [C++] 네임스페이스 (0) | 2025.09.13 |
| [C++] 전방 선언과 헤더 파일에 대한 고찰 (0) | 2025.09.10 |