Это может быть достигнуто в зависимости от вашего компилятора.
Он не работает с Windows MSVS, но я протестировал его и работал со следующими версиями компилятора gcc / g ++ (плюс встроенный cpp):
- mipsel-openwrt-linux-uclibc-gcc.bin (OpenWrt / Linaro GCC 4.8-2014.04 r47072) 4.8.3
- g ++ (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0 20160609
- gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0 20160609
- avr-g ++. Exe (AVR_8_bit_GNU_Toolchain_3.5.4_1709) 4.9.2
Определив одно из ваших перечислений в значении, которое будет представлено в длинном значении, в некоторых компиляторах оно принудительно привело к этому размеру. Код ниже, как правило, выводит:
8
4
4
Источник:
#include <iostream>
using namespace std;
typedef enum
{
ENUM_11,
ENUM_12,
enum1_force_long = 0x1122334455667788
} LongEnum1_t;
typedef enum
{
ENUM_21,
ENUM_22,
enum2_force_long = 0x11223344
} LongEnum2_t;
typedef enum
{
ENUM_31,
ENUM_32,
enum3_force_long = 0x1122
} LongEnum3_t;
LongEnum1_t enum1;
LongEnum2_t enum2;
LongEnum3_t enum3;
int main(void)
{
cout << sizeof(enum1) << endl;
cout << sizeof(enum2) << endl;
cout << sizeof(enum3) << endl;
return 0;
}