ch 1. #define을 쓰려거든 const, enum, inline을 떠올리자

lsh235·2023년 8월 8일
0

Effective Cplusplus

목록 보기
1/1

가급적 선행 터리자보다 컴파일러를 더 가까이 하자.

#define ASPECT_RATIO 1.653
우리에겐 기호식 이름으로 보이지만 컴파일러에게는 전혀 보이지 않는다.
컴팡일러에게 넘어가기 전에 선행 처리자가 밀어버리고 상수로 바꿈.
예로, 소스코드에는 ASPECT_RATIO가 있지만 에러 출력에서는 1.63 상수로 표시 됨.

해결 방법은 매크로 대신 상수를 사용
const double AspectRatio = 1.653;

매크로는 사용할때마다 사본이 생성되지만 상수 타입은 사본이 딱 한개만 생성

주의 해야 할 점은 상수 포인터를 사용할 시에는 const로 선언하고 포인터가 가르키는 대상도 const로 선언해야 한다.
const char * const authorName = "Scott Meyers";

더 나아가 char * 기반의 구닥다리 보다는 string 객체가 사용하기 괜찮음.
const std::string authorName("Scott Meyers");

#define CALL_WITH_MAX(a,b) f((a) > (b) ? (a) : (b))
보단
template<typename T>
inline void callWithMax(const T& a, const T& b) {
f(a>b ? a : b);
}

1개의 댓글

comment-user-thumbnail
2023년 8월 8일

좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기