Warum macht das:
#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);
}
Drucken 4 8 8in C und 8 8 8in C ++ (auf einer Plattform mit 4 Byte Ints)?
Ich hatte den Eindruck, dass die UINT64_MAXZuweisung alle Aufzählungskonstanten auf mindestens 64 Bit zwingen würde, aber en_e_fooin Ebene C bei 32 bleibt.
Was ist der Grund für die Diskrepanz?