Почему это:
#include <stdio.h>
#include <limits.h>
#include <inttypes.h>
int main() {
enum en_e {
en_e_foo,
en_e_bar = UINT64_MAX,
};
enum en_e e = en_e_foo;
printf("%zu\n", sizeof en_e_foo);
printf("%zu\n", sizeof en_e_bar);
printf("%zu\n", sizeof e);
}
напечатать 4 8 8
в C и 8 8 8
в С++ (на платформе с 4 байтовыми ints)?
У меня создалось впечатление, что назначение UINT64_MAX
заставит все константы перечислений иметь как минимум 64 бита, но en_e_foo
остается равным 32 в простой C.
В чем причина несоответствия?