비트 마스크로 값을 사용하는 것처럼 영리한 작업을 수행하지 않는다면 컴파일러에서 열거 형 상수에 할당 할 값을 선택하도록해야합니다. 좀 더 명확한 코드 문서에 대한 열거 형 값을 사용하는 중이라면 모든 값을 명시 적으로 정의하지 않으면 오싹해질 수있는 문제가 있습니까? 나는 값들이 오름차순으로 할당되어 있다고 믿는다. 연속되는 각 컴파일에 대해 동일한 값을 유지하도록 첫 번째 값을 정의해야합니까?명시 적으로 값을 정의해야합니까? 열거 형 상수
C99에서
2
A
답변
4
유형의 사용에 따라 달라질 것이라고 생각합니다. 쉽게
- 추가하고 개발로 값을 제거하기 :
장점
enum
초기화를 제공하지합니다. - 실수로 같은 값을 가진 두 개의 식별자를 정의하지 않을 것입니다.
enum
초기화를 제공하는
장점 :
- 안전 직렬화 데이터를 역 직렬화하는. 이 값들을 파일, 네트워크 소켓 등에 넣어야한다면, 나는 값을 쓸 것이다.
- 디버깅 목적으로 값을 쉽게 볼 수 있습니다.
5
, 제 6.7.2.2p3 :
열거 목록의 식별자는 int 형이 등이 허용되는 곳 가 나타날 수 상수로 선언된다. =가있는 열거자는 열거 형 상수를 상수 식의 값으로 정의합니다. 첫 번째 열거 자의 값이 =이 아닌 경우 해당 열거 형 상수 값은 0입니다. no = 이있는 각 후속 열거자는 에서 얻은 상수 식의 값으로 열거 형 상수를 정의하고 이전 열거 상수의 값에 1을 더합니다. ( =으로 열거의 사용은 같은 열거에서 다른 값을 중복 값을 열거 상수를 생성 할 수 있습니다.)
첫 번째 열거에 값을 할당 할 필요가있는 유일한 시간입니다 당신이 그 값을 원하는 경우 0
과 달라야합니다. 일반적으로 열거자를 사용하여 배열을 인덱싱하는 경우가 많기 때문에 그렇게하지 않을 것입니다.
다음은 "이전 값에 1을 더하는"간단한 예제입니다.
enum {
A,
B,
C = 0,
D,
E
};
int main()
{
printf("%d\n", A);
printf("%d\n", B);
printf("%d\n", C);
printf("%d\n", D);
printf("%d\n", E);
return 0;
}
위의 프로그램의 출력은 다음과 같습니다
0
1
0
1
2
유일한 "잡았다"나는 여러 enum
이름이 같은 값을 표시하려는 경우, 당신이 기억해야한다는 것입니다 생각할 수 별칭 옆에있는 항목이나 enum
목록의 맨 아래에 막대기를 붙입니다. 후자를 선호하므로 enum
값을 예측하기 위해 enum
행을 계산할 수 있습니다.
enum {
A,
B,
E,
/* aliases below */
C = A,
D = B
};
그렇지 않으면 열거자는 int
리터럴과 같습니다.
관련 문제
- 1. mybatis의 SQL 쿼리에서 열거 형 상수
- 2. 열거 형 값을 의심합니까?
- 3. C# 열거 형 또는 int 상수
- 4. 열거 형 값을 별도의 열거 형 형식으로 다시 사용
- 5. DB의 열거 형 또는 열거 형 열거 형
- 6. 자바 열거 형 값을 비교
- 7. 열거 형 내의 열거 형
- 8. 열거 형 내의 열거 형
- 9. 복합 형 열거 형
- 10. 인터페이스 대 열거 형
- 11. C# 열거 형 변환을 방지합니다
- 12. 다른 열거 형 값에 열거 형 지정
- 13. 명시 적으로 n 값을 Symbol # to_proc
- 14. 명시 적으로 malloc()의 반환 값을 캐스팅해야합니까?
- 15. 명시 적으로 자바 스크립트에서 생성자에서 값을 반환
- 16. 명시 적으로 값을 외부 페이지에 게시하십시오. PHP
- 17. 매핑 값을 상수 또는 열거 형으로 선언해야합니까?
- 18. 전역 상수와 열거 형
- 19. 상수 및 매크로보다 열거 형 배열의 장점은 무엇입니까?
- 20. 열거 형 대 강력한 형식의 열거 형
- 21. 자바 열거 형 : 리팩토링 switch 문 '상수 표현식 필요'컴파일 오류?
- 22. 열거 형 및 주석
- 23. 열거 형?
- 24. 열거 형
- 25. 열거 형 "복사"문제가 발생했습니다.
- 26. 자바 열거 형 확장하기
- 27. mysql 열에서 열거 형 값을 제거하십시오.
- 28. 잘못된 열거 형 값을 사용하여 개체 직렬화
- 29. 프로토콜 버퍼에서 열거 형 확장의 값을 읽습니다.
- 30. 확장 메서드 열거 형 값을 수정하는 방법
마지막 구문을 사용하면 괜찮습니다. 'const int'가 아닙니다. 그것은 객체가 아니며 주소도없고 컴파일시 정수 상수 표현입니다. –
@ JensGustedt :'const int'는 "int int 형"상수라고 말한 곳에서 인용 한 표준 단락에서 왔지만 당신이 잘못 해석 한 것이 옳습니다. 나는 형을 편집하고, 안부를 전한다. – jxh