열거 형을 8 또는 16 비트로 강제 설정하는 방법에 대한 몇 가지 질문을 보았습니다. 일반적인 대답은 C++ 11 이상에서 수행 될 수 있다는 것입니다. 불행히도, 나는 그 사치가 없다.열거 형 필드를 비트 필드가있는 표준 C에서 8 비트로 강제 변환
그래서 여기에 제가 생각하고있는 것이 있습니다. 크기를 최소화하려는 구조체에있을 때만 열거 형을 8 비트로해야합니다. 그래서 :
옵션 A :
typedef enum { A, B, C, MAX = 0xFF } my_enum;
struct my_compact_struct
{
my_enum field1 : 8; // Forcing field to be 8 bits
uint8_t something;
uint16_t something_else;
};
나는 대부분의 생각 또는 모든 최적화를 처리 할 수있을만큼 똑똑해야 8 효율적으로 비트 필드.
옵션 B :
이 열거를 사용하지 않습니다. typedef와 상수를 대신 사용하십시오.
typedef uint8_t my_type;
static const my_type A = 0;
static const my_type B = 1;
static const my_type C = 2;
struct my_compact_struct
{
my_type field1;
uint8_t something;
uint16_t something_else;
};
옵션 A는 현재 구현 및 작동하는 것 같군,하지만 난 지금하지 일하고있어 그냥 뭐 정확한 무엇 (현재와 미래)하고 싶은 때문에 옵션 B는 분명히 더 나은 경우, 궁금 해서요된다.
감사합니다,
(A)는 필드를 최소화하지 않습니다. 전체 필드의 8 비트 만 사용할 수 있습니다. – StoryTeller
C 및 C++은 다른 언어입니다. 어느 것을 사용합니까? – Olaf
귀하의 질문에 "표준 C"하지만 귀하의 태그는 "C + +"를 포함합니다. 어느 쪽을 사용하고 있습니까? –