2013-06-21 4 views
2

을 사용하면 보다 C에서 더 많은 오버 헤드 (구체적으로는 AVR-GCC를 사용하여 컴파일)를 수행하고 나서 각 값을 #define VALUE_1 0x00으로 정의합니까?C typedef enum compilation

내 특정 응용 프로그램이 반환 및 기능을 확인할 수 있습니다 상태 코드입니다. typedef enum 스타일을 사용하는 것이 더 나을 것 같지만 컴파일 된 응용 프로그램에 상당한 오버 헤드가 추가되지 않도록하고 싶었습니다.

아니 겠지만, 나는 정말로 확신하지 못했습니다. 비슷한 질문을 찾으려고했지만 대부분 C++에 속하며 C++에 대한 구체적인 답변을 얻었습니다.

+4

아니요, 열거 형의 컴파일 타임 상수는 C입니다. –

답변

3

enum 선언은 열거 형을 생성한다. 이러한 유형은 미리 정의 된 정수 유형과 호환되지만 (따라서 크기와 표현이 동일 함) 컴파일러가 어느 유형을 선택합니다.

그러나 열거 상수는 항상 유형 int의입니다. (이 상수는 열거 타입 인 C++, 다릅니다.)

그래서 typedef unsigned char ...typedef enum ... 가능성이 유형 또는 함수의 객체를 정의하는 경우 중요 할 수 있습니다 유형의 크기와 표현을 변경됩니다 형식을 반환하지만 VALUE_1 등의 형식은 int 중 하나입니다.

그것은 enum 유형을 사용하는 것이 가장이다; 그런 식으로 컴파일러는 어떤 표현이 가장 적합한 지 결정할 수 있습니다. unsigned char을 지정하는 대안은 저장소를 최소화하지만 플랫폼에 따라 실제로는 int과 호환되는 것을 사용하여 객체에 대한 액세스 속도를 늦출 수 있습니다.

또한, 타입 정의는 반드시 필요한 것은 아니다. 원하는 경우, 당신은 태그 사용할 수 있습니다

enum typeName { Value_1 = 0x00, ... }; 

을하지만 당신은 enum typeName보다는 typeName로 형식을 참조해야합니다. typedef의 장점은 유형에 단일 식별자 만 부여 할 수 있다는 것입니다.