c++/기초

매크로

코드망령 2026. 5. 31. 12:48

#define 매크로

#define은 전처리기(Preprocessor) 지시문이다.

컴파일하기 전에 코드의 특정 문자열을 다른 값으로 치환할 수 있다.

#define 이름 값

예시:

#define MAX_HP 100

int hp = MAX_HP;

컴파일 전에 다음과 같이 치환된다.

int hp = 100;

특징

  • 컴파일 전에 단순 텍스트 치환
  • 변수가 아님
  • 타입이 존재하지 않음
  • 메모리에 저장되지 않음
  • 세미콜론(;)을 사용하지 않음
#define PI 3.14

매크로 함수

함수처럼 사용할 수도 있다.

#define SQUARE(x) ((x) * (x))

사용 예시:

int a = SQUARE(3);

컴파일 전에 다음과 같이 치환된다.

int a = ((3) * (3));

결과:

a = 9

괄호를 사용하는 이유

매크로는 단순 치환이기 때문에 괄호가 없으면 예상치 못한 결과가 나올 수 있다.

잘못된 예시:

#define SQUARE(x) x * x

int a = SQUARE(1 + 1);

치환 결과:

int a = 1 + 1 * 1 + 1;

연산 우선순위 때문에 실제 계산은

1 + (1 * 1) + 1

이 되어 결과가

3

이 된다.


올바른 예시:

#define SQUARE(x) ((x) * (x))

int a = SQUARE(1 + 1);

치환 결과:

((1 + 1) * (1 + 1))

결과:

4

#undef

#define으로 정의한 매크로를 해제하는 명령어이다.

#define A 10

#undef A

이후에는 A가 더 이상 10으로 치환되지 않는다.

#define A 10

int x = A;   // 10

#undef A

int y = A;   // 오류 발생

정리

명령어 설명
#define 매크로 정의
#define SQUARE(x) 매크로 함수 정의
#undef 매크로 해제

핵심

  • 컴파일 전에 텍스트를 치환한다.
  • 변수처럼 메모리에 저장되지 않는다.
  • 타입이 존재하지 않는다.
  • 매크로 함수는 괄호를 반드시 사용한다.
  • #undef로 매크로를 제거할 수 있다.

 

'c++ > 기초' 카테고리의 다른 글

참조자(Reference)  (0) 2026.05.31
포인터  (0) 2026.05.31
정적 변수  (0) 2026.05.29
오버로딩  (0) 2026.05.29
형변환  (0) 2026.05.29