Item2 - #define을 쓰려거든 const, enum, inline을 떠올리자
챕터 핵심 내용
- 단순한 상수를 쓸 대는, #define보다 const 객체 혹은 enum을 우선 고려하자.
- 함수처럼 쓰이는 매크로를 만들려면, #define 매크로보다 인라인 함수를 우선 고려하자.
- 단순한 상수를 쓸 대는, #define보다 const 객체 혹은 enum을 우선 고려하자.
- 함수처럼 쓰이는 매크로를 만들려면, #define 매크로보다 인라인 함수를 우선 고려하자.
- 단순한 상수를 쓸 대는, #define보다 const 객체 혹은 enum을 우선 고려하자
- 전처리기로 기호상수를 정의할 시, 컴파일러의 기호 테이블에 추가되지 않는다.
- 이는, 작동 방식이 '대체'이기 때문이다.
- 디버깅을 할 때, 난감할 수 있다.
- 또한, 코드의 길이가 늘어난다.
- 클래스 상수를 정의할 땐,
enum
을 응용할 수 있다.
- 동작 방식이
const
보다 #define
에 가깝다. - 옛날 코드들에게서 발견될 수 있다.
- 전처리기로 기호상수를 정의할 시, 컴파일러의 기호 테이블에 추가되지 않는다.
- 이는, 작동 방식이 '대체'이기 때문이다.
- 디버깅을 할 때, 난감할 수 있다.
- 또한, 코드의 길이가 늘어난다.
- 클래스 상수를 정의할 땐,
enum
을 응용할 수 있다.
- 동작 방식이
const
보다#define
에 가깝다.- 옛날 코드들에게서 발견될 수 있다.
- 함수처럼 쓰이는 매크로를 만들려면, #define 매크로보다 인라인 함수를 우선 고려하자
#define
으로 만들어진 매크로는 사용방식이 불편하다.- 어처구니 없는 오류가 발생될 수 있다.
#define
으로 만들어진 매크로는 사용방식이 불편하다.- 어처구니 없는 오류가 발생될 수 있다.
#define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b)) int a = 5, b = 0; CALL_WITH_MAX(++a, b); // a가 두 번 증가 CALL_WITH_MAX(++a, b + 10); // a가 한 번 증가
- 함수의 장점과 매크로의 장점을 취하고 있는
inline
함수를 사용하자.
후기(postscript)
C++11부터는 변수나 함수를 상수표현식으로 나타낼 수 있는 constexpr
형식 특정자(specifier)가 추가되었다. 이 형식 특정자는 컴파일 시간에 변수나 함수의 값을 평가한다.
C++11부터는 변수나 함수를 상수표현식으로 나타낼 수 있는 constexpr
형식 특정자(specifier)가 추가되었다. 이 형식 특정자는 컴파일 시간에 변수나 함수의 값을 평가한다.