2013-07-19 2 views
1

가정하자 나는이 다음 상수 : 비교 상수

const char EASY = 'E'; 
const char NORMAL = 'N'; 
const char HARD = 'H'; 
const char LUNATIC = 'L'; 

내가 미치광이가 EASY보다 큰 NORMAL,보다 큰 하드,보다 커야합니다. 대신 상수 정의와 코드의

int main(){ 
    char diff1 = LUNATIC; 
    char diff2 = NORMAL; 

    if (diff1 > diff2){ 
     printf("Lunatic is harder than normal"); 
    } 
    return 0; 
} 
+12

한 단어 :'enum' – Kevin

+5

'enum {EASY, NORMAL, HARD, LUNATIC}; ' –

+1

여러분은 상수가있을 때 대개 그들 사이의 관계를 알고 있습니다. 왜 그들 사이의 평등을 확인하겠습니까? – Maroun

답변

4

사용 열거 :

enum Difficulty 
{ 
    EASY, 
    NORMAL, 
    HARD, 
    LUNATIC 
}; 

int main(){ 
    char diff1 = LUNATIC; 
    char diff2 = NORMAL; 

    if (diff1 > diff2){ 
     printf("Lunatic is harder than normal"); 
    } 
    return 0; 
} 
+1

이제는 enum이 의미하는 것과 그것이 어떻게 작동하는지 이해할 수있다. @ LChaos2의 이름으로도 감사합니다! –

2

사용 enum { EASY, NORMAL, HARD, LUNATIC };이 작동하기 시작합니다 : 다음이 작동 어디 등을 정의 할 방법

.

그러나 내가 이해할 수없는 한 가지는 상수를 비교할 필요가 있다는 것입니다. 값을 컴파일시의 상수로 알고 있습니다!

0

여러 가지 방법이있다.

typedef enum Difficulty { 
    Easy, 
    Normal, 
    Hard, 
    Lunatic 
} Difficulty; 

이이처럼 사용할 수 있습니다 :

void foo(Difficulty a, Difficulty b) 
{ 
    if (a > b) { 
     // ... 
    } else 
    // ... 
} 

// ... 

Difficulty a = Easy; 
Difficulty b = Hard; 
foo(a, b); 

다른 방법도 가능 클리너 솔루션은 정수 값을 증가하는 것으로 보장 열거를 사용하는 것입니다. 다음과 같이 값이 증가하는 매크로를 사용할 수 있습니다.

#define EASY 0 
#define NORMAL 1 
#define HARD 2 
#define LUNATIC 3 

현재 접근 방식도 사용할 수 있지만 상수에는 실제 문자를 사용할 이유가 없습니다. 당신은 대신 숫자 값을 사용할 수 있습니다 : 나는 그 char 상수를 사용하도록 요구 볼 수

const char EASY = 0; 
const char NORMAL = 1; 
const char HARD = 2; 
const char LUNATIC = 3; 

그리고 물론

는 지금까지 진짜 이유가 없다. 대신 int을 사용할 수 있습니다.

첫 번째 방법 (열거 자 사용)은 일반적으로 사용하는 실제 typedef를 제공하므로 코드를 조금 더 쉽게 읽을 수 있습니다. 변수가 Difficulty 인 경우, 보유 할 것으로 예상되는 값의 종류를 즉시 알 수 있습니다.

열거자를 염두에 두어야 할 한 가지는 정수와 호환된다는 것입니다. 즉, 숫자 값을 할당 할 수 있으므로 유형 안전성을 제공하지 않습니다. 그것은 대부분 안전 코드를 쓰는 것이지 안전하지는 않습니다.