본문 바로가기

프로그램언어/Effective C++

[C++] Effective C++ - 항목2 -

항목 2 : #define 보다 const, enum, inline 을 고려하자.( 선행처리자보다 컴파일러를 더 가까이 하자 )

ㅇ 심볼 정의
ㅇ #define
- 숫자 상수로 대체된 코드에서 에러 발생시 명확하지 않다.

ㅇ const 
- 에러 발생시 정의된 값이 아닌 변수명이 출력되므로 명확하게 알 수 있다.
- define의 사용 경우보다 최종 코드의 크기가 줄어든다.


- #define을 상수로 교체하려는 경우 상수 포인터 정의시 포인터와 데이터 모두 const로 정의하자.

ㅇ 클래스 상수를 정의하는 경우
ㅇ const
- 잘못된 컴파일러에 따라 정의를 따로 요구하는 경우가 있다.

ㅇ 정적 클래스 상수에 대한 클래스 내 초기화를 금지하는 컴파일러도 존재한다.

ㅇ enum 
ㅇ 정적 클래스 상수를 대체할 수 있음.
ㅇ 주소를 취할 수 없음.
ㅇ enum은 #define처럼 쓸데없는 메모리 할당을 저지르지 않는다.

ㅇ 매크로 함수의 경우
ㅇ #define
- 사용상의 오류와 사용방법에 있어 신중해야 한다.( 인자마다 괄호)


ㅇ inline
- 매크로 효율 유지
- 정규 함수의 동작 방식 및 타입 안정성
- 클래스내 유효범위 지정.