Skip to content

Latest commit

 

History

History
31 lines (28 loc) · 1.45 KB

Item2.md

File metadata and controls

31 lines (28 loc) · 1.45 KB

항목 2. #define을 쓰려거든 const, enum, inline을 떠올리자

  • 선행 처리자 보다 컴파일러를 가까이하자
#define ASPECT_RATIO 1.653
  • 전처리 과정을 통해 ASPECT_RATIO를 1.653으로 바꿔준다.
  • 값이 대체되는거라 에러가 발생하면 ASPECT_RATIO가 아닌 1.653만 보여 헷갈릴 수 있다.
const double AspectRatio = 1.653;
  • 언어 차원에서 지원하는 상수 타입이기 때문에 컴파일러 눈에도 보리고 기호 테이블에도 들어간다.

클래스 상수

  • 클래스 멤버로 상수를 정의하는 경우 상수를 정적 멤버로 만들어야 한다.
  • 클래스 상수의 선언헤더 파일에 두고, 정의구현 파일에 둔다.
  • 정적 멤버로 사용하는 방식 해당 문법을 받아들이지 않는 컴파일러도 존재한다.
  • static const int NumTerns = 5

나열자 둔갑술 (enum hack)

  • enumerator 타입의 값은 int가 놓일 곳에도 쓸 수 있다.
  • 나열자 둔갑술의 동작 방식은 const 보다는 #define에 가깝다.
    • const의 주소를 잡아낼 수는 있지만, enum의 주소를 취하는것은 불가능하다.
    • 클래스 멤버 변수로 상수를 정의하는 경우 나열자 둔갑술을 사용하면 좋다.
class player{
private:
   enum { NumTurns = 5}; // enum hack. NumTurns를 5에 대한 기호식 이름으로
   int scores[NumTurns];
};