#define 으로 정의한 상수는 preprocessor에 의해 처리가 되어 컴파일러에 잡히지 않는다. 따라서 이 부분에서 실수가 일어나도 컴파일러가 이를 알려줄 수 없기 때문에, 가급적이면 #define의 다른 대체제를 사용하는 것이 좋다.
const
#define을 constants로 바꿔줄 때, 두가지 경우를 고려할 수 있다.
- Defining constant pointer
- Class-specfic constants
const 위치에 따른 의미 변화에 유의. [EC++ 03]에서 자세히 다룸.
static const int value = 5;
enum
"enum hack"
inline
#define function을 정의할 때는 문의 괄호에 반드시 신경써야 함.
Summary
- For simple constants, prefer const objects or enums to #defines.
- For function-like macros, prefer inline functions to #defines.
Reference
- Effective C++ by Scott Meyers