Может кто-нибудь объяснить, почему член X
имеет другой размер, чем сам перечисленный тип, несмотря на то, что он явно определен как LL
? Кажется противоречивым, что мне нужно сделать (enum e_x)X
членом того же перечисляемого типа, чтобы быть уверенным, что он имеет тот же размер, что и тип.Размер перечислений
#include <stdio.h>
#include <limits.h>
enum e_x { X = 0LL, M = LLONG_MAX };
int main() {
printf("%zu %zu %zu %zu\n",
sizeof X,
sizeof((enum e_x)X),
sizeof(enum e_x),
sizeof(long long));
}
Выход:
4 8 8 8
Ожидаемое:
8 8 8 8
Как вы можете иметь дело с этим при переходе перечисления в функцию, которая использует va_arg
?
Удивительно, 'sizeof M == 8'. В то же время 'gcc -pedantic' предупреждает, что' ISO C ограничивает значения перечислителя диапазоном 'int''. – Gepard