Post List

2015년 1월 4일 일요일

#define 대신 const, enum, inline

#define 의 Symbol은 Compiler에게 보이지 않아서 Debugger에서는 알 수가 없다.

* 단순한 상수를 쓸 때는, #define보다 const 객체 혹은 enum을 우선 생각합시다.

#define ASPECT_RATIO 1.653
//대신에
const double AspectRatio = 1.653d;

 Class 안에 배열의 크기를 지정하는 것과 같은 경우는 변수가 정의가 되어 있어야 한다. 하지만 header 파일에서는 변수는 선언만 하지 정의를 하지 않는다. 이럴 경우에는  나열자 둔갑술(enum hack) 을 사용하면 된다.

class Player {
private:
    enum { NumTurns = 5 };
    int scores[NumTurns];
    ...
};

* 함수처럼 쓰이는 매크로를 만들려면, #define 매크로보다 inline 함수를 우선 생각합시다.

#define CALL_WITH_MAX(a, b) ((a) > (b) ? (a) : (b))

template<typename T>
inline const T callWithMax(const T&a, const T&b)
{
    return a > b ? a: b;
}



댓글 없음:

댓글 쓰기