#define에 관하여

윤정민·2023년 11월 2일
0

C++

목록 보기
45/46

#define(선행처리자)을 사용하는 대신 const, enum, inline(컴파일러)을 사용하자.

왜?

1. 이름이 안보이거든

#define ASPECT_RATIO 1.653 을 작성했다고 생각하자

  • ASPECT_RATIO1.653으로 대체하기 때문에 컴파일러는 ASPECT_RATIO를 보지 못함
    • 컴파일 에러를 볼 때 이로인해 헷갈릴 수 있음

2. 컴파일된 최종 코드 크기가 커지거든

#define된 것들은 선행처리자에 의해 모두 값으로 바뀌면서 목적 코드안에 사본이 등장 횟수만큼 들어가게 됨.

3. 클래스 상수는 만들 수 없음

  • #define은 유효범위란 게 뭔지도 모르기 때문에 클래스 상수를 만드는게 불가능
  • 따라서 캡슐화도 불가능

4. 매크로 함수는 코드변화로 두번의 증가가 일어남

#include <iostream>

#define CALL_WITH_MAX(a, b) f((a)>(b) ? (a) : (b))
using namespace std;
void f(int m)
{
	cout << m << "\n";
}

int main()
{
	int a = 5, b = 0;

	CALL_WITH_MAX(++a, b);
	CALL_WITH_MAX(++a, b + 10);

	return 0;
} 
profile
그냥 하자

0개의 댓글