From: Zbigniew Jędrzejewski-Szmek Date: Tue, 22 May 2018 07:07:35 +0000 (+0200) Subject: test-sizeof: show that a small 64 field is not enough to force the enum to be 64... X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=f313a958abd17a56a09ae76dff59c75dcfdf233a;p=elogind.git test-sizeof: show that a small 64 field is not enough to force the enum to be 64 bits On both 32 and 64 bits, the result is: enum Enum → 32 bits, unsigned enum BigEnum → 32 bits, unsigned enum BigEnum2 → 64 bits, unsigned big_enum2_pos → 4 big_enum2_neg → 8 The last two lines show that even if the enum is 64 bit, and the field of an enum is defined with UINT64_C(), the field can still be smaller. --- diff --git a/src/test/test-sizeof.c b/src/test/test-sizeof.c index 103c96955..2f369ef25 100644 --- a/src/test/test-sizeof.c +++ b/src/test/test-sizeof.c @@ -26,7 +26,12 @@ enum Enum { }; enum BigEnum { - big_enum_value = UINT64_C(-1), + big_enum_value = UINT64_C(1), +}; + +enum BigEnum2 { + big_enum2_pos = UINT64_C(1), + big_enum2_neg = UINT64_C(-1), }; int main(void) { @@ -59,6 +64,10 @@ int main(void) { info(enum Enum); info(enum BigEnum); + info(enum BigEnum2); + assert_cc(sizeof(enum BigEnum2) == 8); + printf("big_enum2_pos → %zu\n", sizeof(big_enum2_pos)); + printf("big_enum2_neg → %zu\n", sizeof(big_enum2_neg)); return 0; }