2010-06-25 4 views
8

enum과 #define은 스타일을 정의하는 아래 예제에서 동일한 작업을 수행 할 수 있습니다. #define은 컴파일러 전 처리기의 매크로 대체라는 것을 이해하십시오. 다른 상황보다 선호되는 상황이 있습니까?enum 또는 define 중 어느 것을 사용해야합니까?

typedef enum { 
    SelectionStyleNone, 
    SelectionStyleBlue, 
    SelectionStyleRed 
} SelectionStyle; 

#define SELECTION_STYLE_NONE 0 
#define SELECTION_STYLE_BLUE 1 
#define SELECTION_STYLE_RED 2 
+0

참고 사항 : [#define, enum 또는 const를 사용해야합니까?] (http://stackoverflow.com/questions/112433/should-i-use-define-enum-or-const) – Shog9

답변

3

대 열거 형은 유형의 안전을 원하는 경우 최고입니다. 심볼로도 내보내므로 일부 디버거에서는 인라인으로 표시 할 수 있지만 정의 할 수는 없습니다.

물론 열거 형의 주된 문제점은 정수 만 포함 할 수 있다는 것입니다. 문자열, 부동 등 ... 당신 const 또는 정의와 함께 더 좋을 수도 있습니다.

+0

무슨 뜻입니까? 타입 안전에 대해서? 이 코드는 합법적입니다 : enum E {A = 1}; E t = E (2); 결과는 정의되지 않습니다. 따라서 열거 형은 TYPE 안전하지만 VALUE는 안전하지 않으므로 정의 할 때 거의 열악합니다./ – f0b0s

+0

캐스트를 사용하면 모든 것을 할 수 있지만 그 사실을 증명할 수는 없습니다. – kmm

11

적 정의를 사용하지 마십시오 :이 기사는 꽤 좋은 긴 대답을 제공합니다. 필수적인 열거 형처럼 단순한 것을 위해 열거 형을 사용하십시오.

1

정의는 열거 형보다 약간 빠르지 만 이점은 아마도 소수의 사이클에 불과하므로 실제로 필요한 것을하지 않는 한 무시해도됩니다. 전 처리기를 사용하는 것이 디버깅하기가 더 어렵 기 때문에 열거 형을 사용할 것입니다.

+1

"열거 형에 가라"는 뜻인가요? – nall

1

원하는 기능 (이 경우 항목 열거)을 지원하는 내장 언어 기능이있는 경우이 기능을 사용해야합니다.

0
#define DEFINED_VALUE 1 
#define DEFINED_VALUE 2 // Warning 
enum { ENUM_VALUE = 1 }; 
enum { ENUM_VALUE = 2 }; // Error 

#define을 사용하면 미묘한 버그가 발생할 확률이 높아집니다.

관련 문제