선행 처리자보다 컴파일러를 더 가까이 하자
#define 은 선행처리 해버리기 때문에 컴파일러가 알 수 없다.
#define Angle 1.653
이러면 에러 메세지에 Angle 대신 1.653만 나옴 (찾기 어려움)
대신 const를 사용한다.
const double angle = 1.653;
나열자 둔갑술 (enum hack)
메모리 할당이 싫고, 해당 객체에서만 사용하게 하고 싶다.
class GamePlayer
{
private:
enum { NumTurns = 5 };
int scores[NumTurns];
...
}
표준에 어긋난 구식 방법이지만 유용함
매크로의 단점
선행 처리 하기 때문에 오용될 수 있음
#define CALL_WITH_MAX (a, b) f((a) > (b) ? (a) : (b))
int a =5, b =0;
CALL_WITH_MAX(++a, b); // a가 두 번 증가함
CALL_WITH_MAX(++a, b+10) // a가 한 번 증가함
오용하지 않게 함수화 해야함 (디파인과 똑같이 동작하려면 inline 함수에 대한 템플릿)
template
inline void callWithMax(const T& a, const T& b)
{
f(a > b ? a : b);
}
이것만은 잊지 말자!
- 단순한 상수를 쓸 때는, #define보다 const 객체 혹은 enum을 우선 생각하자
- 함수처럼 쓰이는 매크로를 만들려면, #define 매크로보다 인라인 함수를 우선 생각하자
'C++' 카테고리의 다른 글
Effective C++ 항목 1 : C++를 언어들의 연합체로 바라보는 안목은 필수 (0) | 2023.12.10 |
---|---|
스마트 포인터 (0) | 2022.11.12 |
#10. 네트워크 (0) | 2022.05.16 |
#7. STL , - Vector (0) | 2022.04.28 |
#5. 자료구조 (0) | 2022.04.04 |
댓글