항목 2 : #define 보다 const, enum, inline 을 고려하자.( 선행처리자보다 컴파일러를 더 가까이 하자 )
ㅇ 심볼 정의
ㅇ #define
- 숫자 상수로 대체된 코드에서 에러 발생시 명확하지 않다.
ㅇ const
- 에러 발생시 정의된 값이 아닌 변수명이 출력되므로 명확하게 알 수 있다.
- define의 사용 경우보다 최종 코드의 크기가 줄어든다.
- #define을 상수로 교체하려는 경우 상수 포인터 정의시 포인터와 데이터 모두 const로 정의하자.
ㅇ 클래스 상수를 정의하는 경우
ㅇ const
- 잘못된 컴파일러에 따라 정의를 따로 요구하는 경우가 있다.
ㅇ 정적 클래스 상수에 대한 클래스 내 초기화를 금지하는 컴파일러도 존재한다.
ㅇ enum
ㅇ 정적 클래스 상수를 대체할 수 있음.
ㅇ 주소를 취할 수 없음.
ㅇ enum은 #define처럼 쓸데없는 메모리 할당을 저지르지 않는다.
ㅇ 매크로 함수의 경우
ㅇ #define
- 사용상의 오류와 사용방법에 있어 신중해야 한다.( 인자마다 괄호)
ㅇ inline
- 매크로 효율 유지
- 정규 함수의 동작 방식 및 타입 안정성
- 클래스내 유효범위 지정.
'프로그램언어 > Effective C++' 카테고리의 다른 글
항목 22. 데이터 멤버가 선언될 곳은 private 영역임을 명심하자. (0) | 2010.03.27 |
---|---|
항목 21. 함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자. (0) | 2010.03.27 |
[C++] Effective C++ - 항목1 - (0) | 2010.01.29 |
[C++] Effective C++ No.6 (0) | 2009.03.16 |