Можно ли как-то упаковать перечислимый тип? Известно, что он имеет размер sizeof(int). Есть такой код (фрагменты из Linux NTFS Project): Код (Text): // ... typedef uint16_t u16; // ... #if defined(__CHECKER__) && !defined(NTFS_DO_NOT_CHECK_ENDIANS) #undef __bitwise #undef __force #define __bitwise __attribute__((bitwise)) #define __force __attribute__((force)) #else #undef __bitwise #undef __force #define __bitwise #define __force #endif // ... typedef u16 __bitwise le16; //... #define __constant_cpu_to_le16(x) ((__force le16)(x)) //... #define const_cpu_to_le16(x) (le16)__constant_cpu_to_le16((u16)(x)) //... typedef enum { MFT_RECORD_IN_USE = const_cpu_to_le16(0x0001), MFT_RECORD_IS_DIRECTORY = const_cpu_to_le16(0x0002), MFT_RECORD_IS_4 = const_cpu_to_le16(0x0004), MFT_RECORD_IS_VIEW_INDEX = const_cpu_to_le16(0x0008), MFT_REC_SPACE_FILLER = const_cpu_to_le16(0xffff), /* Just to make flags 16-bit. */ } __attribute__((__packed__)) MFT_RECORD_FLAGS; Хотелось бы подобное получить в VC++. Что-то типа следующего: Код (Text): #pragma pack(push, 2) typedef enum _FLAG { f1 = 0x0001, f2 = 0x0002, f3 = 0x0004, f4 = 0xffff } FLAG; #pragma pack(pop)
Мы в удивлении — зачем это может быть нужно? Enum'ы — это некий сорт констант же: Код (Text): const unsigned short f1 = 0x0001; const unsigned short f2 = 0x0002; const unsigned short f3 = 0x0004;
Да, но это не просто набор констант, а определенный пользователем ТИП содержащий набор именованных констант.